반응형
숫자들이 공백으로 구분된 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 “Z”가 나오면 바로 전에 더했던
숫자를 뺀다는 뜻입니다. 숫자와 “Z”로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.
입출력 예
s | result |
"1 2 Z 3" | 4 |
"10 20 30 40" | 100 |
"10 Z 20 Z 1" | 1 |
입출력 예 #1
- 본문과 동일합니다.
입출력 예 #2
- 10 + 20 + 30 + 40 = 100을 return 합니다.
입출력 예 #3
- "10 Z 20 Z 1"에서 10 다음 Z, 20 다음 Z로 10, 20이 지워지고 1만 더하여 1을 return 합니다.
[풀이]
function solution(s) {
const numbers = [];
for (const el of s.split(" ")) {
el === "Z" ? numbers.pop() : numbers.push(el);
}
return numbers.reduce((acc, cur) => acc + +cur, 0);
}
많은 고민을 거쳐서 풀었던 문제다.
먼저 numbers라는 빈 배열을 만들어준다.
for...of를 이용해서 풀었다.
s를 공백을 기준으로 자른 배열안의 요소가 "Z"와 다르면 el을 numbers 배열에 넣어준다.
예시)
s = "1 2 Z 3" 일 때
s.split(" ") = ["1", "2", "Z", "3"]이고
"1"은 "Z"와 다르기 때문에 numbers에 추가된다.
numbers = ["1", "2"]가 추가 된 후에
el === "Z"와 같게 된다면 numbers.pop()을 해준다. (맨 뒤 요소 삭제)
그렇게 되면 다시 numbers = ["1"]이 되고 "Z"를 지나 결국
numbers = ["1", "3"]이 된다.
그리고 reduce를 이용해 값을 더해주면 된다.
return numbers.reduce((acc, cur) => acc + +cur, 0);
이 코드에서 acc + +cur 의 뜻을 알아보자면
"1" 앞에 + 를 붙여주면 숫자형으로 변해 1이된다.
결국 1 + 3 = 4가 된다.
[코드 리뷰]
function solution(s) {
const numbers = [];
const arr = s.split(" ");
for (const el of arr) {
el === "Z" ? numbers.pop() : numbers.push(el);
}
return numbers.reduce((acc, cur) => acc + +cur, 0);
}
s.split(" ") 부분을 따로 빼서 변수로 설정해주는 것이 더 보기 좋아보인다.
'코딩 테스트 > Programmers - 0' 카테고리의 다른 글
[JS] 문자열 계산하기 (0) | 2022.10.14 |
---|