https://school.programmers.co.kr/learn/courses/30/lessons/12973
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
전에 풀었던 햄버거 문제도 그렇고
어떤 배열을 반복하면서 특정 동작을 수행하는 문제가 종종 있다.
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.19 |
---|---|
[JS] 프로그래머스 / 삼총사 (0) | 2025.01.09 |
[JS] 프로그래머스 / 숫자의 표현 (0) | 2025.01.09 |
[JS] 프로그래머스 / 바탕화면 정리 (0) | 2024.12.23 |
[JS] 프로그래머스 / 대충 만든 자판 (0) | 2024.12.21 |