본문 바로가기

CS/알고리즘

[230326] 짝지어 제거하기: stack

반응형

 

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

내 풀이

i가 첫 번째 원소라서 stack에 원소가 하나밖에 없을 때, stack[stack.length - 2]는 undefined 다.

function solution(s) {
    const stack = [];
    
    for(let i of s) {
        stack.push(i);
        if(stack[stack.length - 1] === stack[stack.length - 2]){
            stack.pop();
            stack.pop();
        }
    }
    return stack.length === 0 ? 1 : 0;
}

 

 

(+) 효율성 고려하여 s.length 가 홀수 일 때 return 0 추가 처리하기

function solution(s) {
	if(s.length % 2 === 1) return 0;
	...
}

 

(+) for in이나 for of 보다는 for문 형식이 효율성에서 점수가 더 잘 나온다!

 

 

 

다른 풀이

→ string to array 꼭 안해줘도 let val of s 바로 사용할 수 있다.

위의 방법과 동일하게 스택으로 푸는 방법인데,

위의 경우에는 넣고 똑같으면 스택에 있는 걸 두 번 pop하는 방식이고

이 풀이의 경우에는 넣지 않고 안에 있는 것과 비교 후 스택에 있는 걸 한 번만 pop하는 방식이다.

function solution(s) {
    var stringToArray = s.split('');
    var res = [];

    for (var val of stringToArray){
        if( val === res[res.length -1]){
            res.pop();
        } else { 
            res.push(val)
        }
    } 
    return res.length === 0 ? 1 : 0;
}
반응형

'CS > 알고리즘' 카테고리의 다른 글

[230411] 피보나치 수  (0) 2023.04.11
[230327] 구명보트: Greedy 알고리즘  (0) 2023.03.27
[230326] 영어 끝말잇기  (0) 2023.03.26
[230326] 다음 큰 숫자  (0) 2023.03.26
[230326] 숫자의 표현  (0) 2023.03.26