코딩테스트 연습 - 컨트롤 제트 문제 질문

조회수 303회

문제설명

숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 "Z"로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.

제 풀이 생각은 반복문을 돌려서 answer라는 새로운 배열에 넣다가 Z가 나오면 빼고 answer를 만든다. answer에 합을 이용해서 푼다 입니다.

function solution(s) {
   let Array =s.split(" ")
   let answer=[];

   for(let i=0; i<Array.length; i++){
            answer.push(Array[i]) 
       if(Array[i]==='Z'){
            answer.pop()
        }

   }
   return answer.reduce((a,b)=>a+b,0)
}

1 답변

  • 딱 두 군데만 고치면 됩니다.

    일단 현상태를 좀 확인해 볼까요. 다음을 실행하면 뭐가 나오나요?

    console.log(solution("1 1 Z 1"));
    

    기대되는 출력은 2라는 정수입니다. 하지만 실제로는 우습게도 "0111"이라는 문자열이 출력됩니다. 음~ 크게 2가지 문제가 있군요.

    1. 문자열이면 안 되는 게 어째서인지 문자열로 처리되어 튀어나옵니다. 어딘가에서 숫자가 문자열로 변하고 있거나, 애초에 문자열이 숫자로 변환된 적이 한 번도 없거나 둘 중 하나겠지요. 정확한 원인은 한번 찾아보셔야겠군요.
    2. 그나마도 그 문자열에서 1은 2번만 나와야 할 거 같은데 3번이 나옵니다. Z가 실제로는 자기 앞전에 배열에 삽입된 1을 빼질 않고 있습니다. 그럼 대체 뭘 빼고 있는 걸까요? Z가 작동하고 있긴 한 걸까요? 좀 확인해봐야겠군요.

    여기서부터는 직접 하실 수 있을 겁니다. 화이팅!

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)