문제정보
뭔가 리트코드에서 이거랑 비슷한 문제를 풀었던 기억이 나는 것 같은데요
리트코드보다 조건이 훨씬 간단하게 주어졌네요
비슷한 방식으로 풀면 되겠다는 생각이 들었습니다.
공백으로 구분되니 공백을 기준으로 split해주면 되겠네요
예시
s result
"1 2 Z 3" 4
"10 20 30 40" 100
"10 Z 20 Z 1" 1
"10 Z 20 Z" 0
"-1 -2 -3 Z" -3
나의풀이
function solution(s) {
let answer = 0
let arr = s.split(" ")
for(i=1 ; i<arr.length; i++) {
if(arr[i] != "Z" && arr[i-1] != "Z") {
answer += Number(arr[i-1])
}
if(i == arr.length-1 && arr[i] != "Z") {
answer += Number(arr[i])
}
}
return answer
}
처음 풀이입니다.
Z는 연속해서 나올 수 없다는 가정하에 코드를 작성했습니다.
대체로 맞게 동작하지만 7,8번 케이스가 통과되지 않더군요
질문창을 보니까 Z가 연속으로 나올 수 있는 케이스를 고려해보라는 말이 있어서
어쩔수없이 LIFO 구조로 코드를 재구성했습니다.
function solution(s) {
let answer = []
let arr = s.split(" ")
for(i=0;i<arr.length;i++) {
if(arr[i] != "Z") {
answer.push(arr[i])
}
else {
answer.pop()
}
}
return !answer.length ? 0 : answer.map(v=>v*1).reduce((acc,cur) => acc + cur )
}
LIFO구조라고하면 거창해보이지만 구현은 간단합니다.
배열에 Z가 아닌 요소들을 push해주면 가장 나중에 들어간 요소는 배열의 가장 뒤에 위치할것입니다.
Z를 만났을때 pop()을 해주면 배열 가장 뒤 요소를 빼게되니까요!
그 다음 reduce()할때 빈배열이면 런타임에러가 나오게되니
배열이 빈 경우엔 0을 리턴해주고 아닌 경우엔 요소를 정수로 만들어준 다음
reduce로 합쳐줬습니다
반응형
'programmers' 카테고리의 다른 글
[Programmers Level 0] 외계어사전 Javascript (1) | 2022.11.30 |
---|---|
[Programmers Level 0] 문자열 밀기 Javascript (0) | 2022.11.30 |
[Programmers Level 0] 공던지기 Javascript (1) | 2022.11.30 |
[Programmers Level 1] 예산 Javascript (0) | 2022.11.30 |
[Programmers Level 2] 다음 큰 숫자 Javascript (2) | 2022.11.30 |