Contents

Control 'Z' (with. Java)

   Feb 19, 2024     2 min read

β€œControl β€˜Z’” λ¬Έμ œμ— λŒ€ν•˜μ—¬ μ•Œμ•„λ³Έ κΈ€μž…λ‹ˆλ‹€.

μ½”λ”© ν…ŒμŠ€νŠΈ 문제λ₯Ό ν’€λ©°, ν’€μ—ˆλ˜ λ¬Έμ œμ— λŒ€ν•œ νšŒκ³ μ™€ λ‹€λ₯Έ 풀이 방법을 μ•Œμ•„λ³΄λ©°, μ•Œμ•„κ°€κ³ μž ν•©λ‹ˆλ‹€.

λ¬Έμ œμ— λŒ€ν•΄ λ¨Όμ € μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

문제

μˆ«μžμ™€ β€œZ”가 곡백으둜 κ΅¬λΆ„λ˜μ–΄ λ‹΄κΈ΄ λ¬Έμžμ—΄μ΄ μ£Όμ–΄μ§‘λ‹ˆλ‹€.

λ¬Έμžμ—΄μ— μžˆλŠ” 숫자λ₯Ό μ°¨λ‘€λŒ€λ‘œ λ”ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

이 λ•Œ β€œZ”가 λ‚˜μ˜€λ©΄ λ°”λ‘œ 전에 λ”ν–ˆλ˜ 숫자λ₯Ό λΊ€λ‹€λŠ” λœ»μž…λ‹ˆλ‹€.

μˆ«μžμ™€ β€œZβ€λ‘œ 이루어진 λ¬Έμžμ—΄ sκ°€ μ£Όμ–΄μ§ˆ λ•Œ, 머쓱이가 κ΅¬ν•œ 값을 return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄λ³΄μ„Έμš”.

μ œν•œμ‚¬ν•­

  • 1 ≀ s의 길이 ≀ 200
  • -1,000 < s의 μ›μ†Œ 쀑 숫자 < 1,000
  • sλŠ” 숫자, β€œZ”, 곡백으둜 이루어져 μžˆμŠ΅λ‹ˆλ‹€.
  • s에 μžˆλŠ” μˆ«μžμ™€ β€œZβ€λŠ” μ„œλ‘œ 곡백으둜 κ΅¬λΆ„λ©λ‹ˆλ‹€.
  • μ—°μ†λœ 곡백은 주어지지 μ•ŠμŠ΅λ‹ˆλ‹€.
  • 0을 μ œμ™Έν•˜κ³ λŠ” 0으둜 μ‹œμž‘ν•˜λŠ” μˆ«μžλŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • sλŠ” β€œZβ€λ‘œ μ‹œμž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • s의 μ‹œμž‘κ³Ό λμ—λŠ” 곡백이 μ—†μŠ΅λ‹ˆλ‹€.
  • β€œZ”가 μ—°μ†ν•΄μ„œ λ‚˜μ˜€λŠ” κ²½μš°λŠ” μ—†μŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ μ˜ˆμ‹œ

sresult
β€œ1 2 Z 3”4
β€œ10 20 30 40”100

λ¬Έμ œμ— λŒ€ν•œ λ‚˜μ˜ 풀이

class Solution {
    public int solution(String s) {
        int answer = 0;
        String[] temp = s.split(" ");
        int tempInt = 0;
        for(String a : temp){
            if(a.equals("Z")){
                answer -= tempInt;
            } else{
                answer += Integer.parseInt(a);
                tempInt = Integer.parseInt(a);
            }
        }
        return answer;
    }
}

풀이 μ„€λͺ…

  • λ¬Έμžμ—΄ 뢄리: s.split(β€œ β€œ)λ₯Ό 톡해 주어진 λ¬Έμžμ—΄ sλ₯Ό 곡백을 κΈ°μ€€μœΌλ‘œ λΆ„λ¦¬ν•˜μ—¬ λ¬Έμžμ—΄ λ°°μ—΄ temp에 μ €μž₯ν•œλ‹€.
  • 숫자 및 β€˜Z’ 처리: for문을 톡해 λ°°μ—΄ tempλ₯Ό μˆœνšŒν•˜λ©΄μ„œ, 각 μš”μ†Œκ°€ β€˜Z’인 경우 이전에 μ €μž₯된 κ°’ tempIntλ₯Ό ν˜„μž¬κΉŒμ§€μ˜ ν•© answerμ—μ„œ λΉΌμ£Όκ³ , 숫자인 경우 μ •μˆ˜λ‘œ λ³€ν™˜ν•˜μ—¬ ν˜„μž¬κΉŒμ§€μ˜ 합에 더해쀀닀.
  • 이전 κ°’ κΈ°μ–΅: β€˜Z’가 λ‚˜μ˜¬ λ•Œλ§ˆλ‹€ ν˜„μž¬κΉŒμ§€μ˜ ν•©μ—μ„œ λΉΌκΈ°λ₯Ό μˆ˜ν–‰ν•˜λ―€λ‘œ, κ·Έ 이전에 μ €μž₯된 μ •μˆ˜ 값을 tempInt에 κΈ°μ–΅ν•˜μ—¬ ν™œμš©ν•œλ‹€.

μ½”λ“œ μž₯점

  • κ°„λ‹¨ν•œ 둜직: κ°„λ‹¨ν•œ νŒ¨ν„΄μ„ μ΄μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μ²˜λ¦¬ν•˜κ³ , 합을 κ³„μ‚°ν•˜λŠ” 둜직이 직관적이닀.
  • λ°°μ—΄ ν™œμš©: λ¬Έμžμ—΄μ„ λΆ„λ¦¬ν•˜μ—¬ 배열에 μ €μž₯ν•¨μœΌλ‘œμ¨ 각 μš”μ†Œλ₯Ό 순차적으둜 μ²˜λ¦¬ν•  수 μžˆλ‹€.

μ½”λ“œ 단점

  • 였λ₯˜ 처리 λΆ€μ‘±: β€˜Z’가 λ‚˜μ˜€λŠ” κ²½μš°μ™€ μˆ«μžκ°€ λ‚˜μ˜€λŠ” κ²½μš°λ§Œμ„ κ³ λ €ν•˜κ³  있으며, μž…λ ₯값에 λŒ€ν•œ 였λ₯˜ μ²˜λ¦¬κ°€ λΆ€μ‘±ν•˜λ‹€. μœ νš¨μ„± 검사 등을 μΆ”κ°€ν•˜λŠ” 것이 μ’‹λ‹€.
  • 뢄리 κΈ°μ€€ κ³ μ •: ν˜„μž¬ μ½”λ“œμ—μ„œλŠ” 곡백을 κΈ°μ€€μœΌλ‘œ λ¬Έμžμ—΄μ„ λΆ„λ¦¬ν•˜κ³  μžˆμœΌλ‚˜, 이 μ™Έμ˜ λ‹€μ–‘ν•œ κ²½μš°μ— λŒ€ν•œ κ³ λ €κ°€ μ—†λ‹€. μž…λ ₯ λ°μ΄ν„°μ˜ ν˜•μ‹μ— 따라 λ‹€μ–‘ν•œ 경우λ₯Ό μ²˜λ¦¬ν•˜λŠ” λ‘œμ§μ„ μΆ”κ°€ν•˜λŠ” 것이 ν•„μš”ν•˜λ‹€.