https://school.programmers.co.kr/learn/courses/30/lessons/12973
전에 풀었던 햄버거 문제도 그렇고
어떤 배열을 반복하면서 특정 동작을 수행하는 문제가 종종 있다.
function solution(s) {
let arr = [...s]
while(arr.length!==0) {
for(let i=0; i<arr.length-1; i++) {
if(arr[i]==arr[i+1]) {
arr.splice(i, 2)
break
}
}
// return arr.length==0 ? 1 : 0;
}
return 1
}
처음 짠 코드인데 잘 작동될 리가 없다
while 안에 for 문을 넣어서 풀어보려고 했지만 조건에 따라 return 하는 것이 너무 어려웠다.
function solution(s) {
let arr = [...s]
const sliceFunc =(array)=>{
if(array.every((_,i)=>array[i]!==array[i+1])) {
return array.length===0 ? 1 : 0;
}
for(let i=0; i<array.length-1; i++) {
if(array[i]==array[i+1]) {
array.splice(i,2)
return sliceFunc(array)
}
}
};
return sliceFunc(arr)
}
재귀함수를 써도 반은 맞고 반은 런타임 에러 뜸.
문자열 크기가 큰 케이스는 재귀를 계속 돌리면 에러가 나는 것 같다.
최종코드
function solution(s) {
let stack = [];
for(let char of s) {
if(stack.length > 0 && stack[stack.length-1]===char) {
stack.pop()
} else {
stack.push(char)
}
}
return stack.length===0 ? 1 : 0
}
결국 질문목록을 뒤져보며 완성한 코드..
우선 문자열은 for..of 문을 사용하면
배열로 바꾸지 않더라도 이터레이션(iteration) 할 수 있다는 것을 알게 됐다.
처음에는 stack.length > 0 라는 조건 없이 코드를 짰는데
그러면 빈 배열 일때도 첫번째 조건문이 적용되고 undefined 값이 반환되면서
불필요한 작업이 누적되어 효율성이 저하되었다.
기능 구현 능력이 어느 정도 향상되었다면
이제는 리팩토링 능력을 키울 차례다.
'Coding Test' 카테고리의 다른 글
[JS] 프로그래머스 / 삼총사 (0) | 2025.01.09 |
---|---|
[JS] 프로그래머스 / 숫자의 표현 (0) | 2025.01.09 |
[JS] 프로그래머스 / 바탕화면 정리 (0) | 2024.12.23 |
[JS] 프로그래머스 / 대충 만든 자판 (0) | 2024.12.21 |
[JS] 프로그래머스 / 덧칠하기 (0) | 2024.12.21 |