⌨️ 프로그래머스/코딩테스트 입문

[프로그래머스] 컨트롤 제트 🎛️ | JS

하나둘세현 2024. 8. 7. 20:31
728x90

문제

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

해결 과정

문제가 풀리지 않아 라매개발자 영상을 보며 풀었다. 라매개발자 영상을 보고도 이해가 되지 않아 며칠동안 고민했다. 고민을 해도 이해가 되지 않았다. 그러다 문득 완성된 코드를 먼저 이해해보기로 했다. 그래도 이해가 되지않아. 디버깅을 해보면서 이해를 하니까 코드가 이해가 됐다.

function solution(s) {
  // 현재 숫자를 저장할 빈문자열을 만든다.
  let currentNumber = '';
  // (숫자들을 저장할 수 있게)빈배열을 만든다.
  let nums = [];

  // for문을 이용해 순회를 한다.
  for (let i = 0; i < s.length; i++) {
    // 현재 문자를 가져온다.
    let char = s[i];

    // 만약 빈문자일 경우
    if (char == '') {
      // 현재숫자가 빈문자열이 아닐경우
      if (currentNumber !== '') {
        // nums에 currentNumber를 숫자로 바꿔 추가한다.
        nums.push(Number(currentNumber));
        // 현재 숫자를 초기화한다. (그래야 다음에 순회할 수 있기에)
        currentNumber = '';
      }
      // 'Z'가 현재 문자와 같을 경우
    } else if (char == 'Z') {
      //이전에 저장된 숫자를 삭제한다.
      nums.pop();
    } else {
      //현재 숫자문자에 현재 숫자를 추가한다.
      currentNumber += char;
    }

    // 순회가 다 끝난후에도 문자열이 남아있는 경우가 있을 수 있기에
    // 한번더 반복한다.
    if (currentNumber != '') {
      nums.push(Number(currentNumber));
      currentNumber = '';
    }

    // 합계를 구한다.
    let sum = 0;

    for (let i = 0; i < nums.length; i++) {
      sum += nums[i];
    }

    return sum;
  }
}

 

 

 

 

728x90