Programmers 짝지어 제거하기, Javascript

cptkuk91·2022년 9월 13일
1

Algorithm

목록 보기
96/161

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12973

입출력 예

  • 입출력 예 #1
    • 위의 예시와 같습니다.
  • 입출력 예 #2
    • 문자열이 남아있지만 짝지어 제거할 수 있는 문자열이 더 이상 존재하지 않기 때문에 0을 반환합니다.

풀이 코드

function solution(s){
	let result = [];
    
    for(let i = 0; i < s.length; i++){
    	if(result[result.length - 1] === s.charAt(i)){
        	result.pop();
        } else {
        	result.push(s.charAt(i));
        }
    }
	return result.length === 0 ? 1 : 0;
}

풀이

"baabaa"
i = 0;
result 는 비어있기 때문에 바로 else 로 넘어갑니다.
result.push(s.charAt(i)) === 'b'
그럼 현재 result 에는 result = ['b'] 가 담겨있습니다.
i = 1;
result[result.length - 1] === result[0] 을 뜻합니다.
결국 'b' 라는 뜻입니다.
s.charAt(1) 은 현재 'a' 입니다. 따라서 if문이 아닌 else 로 넘어갑니다.
else에서 result에 'a'를 push 하면
result = ['b', 'a'] 가 됩니다.
i = 2;
result[result.length - 1] === result[1] 입니다. 그리고 result[1]은 'a' 입니다.
s.charAt(2) 도 'a' 입니다.
그럼 if 조건에 해당됩니다. 'a' === 'a'
따라서 result.pop()을 통해 ['b', 'a']에서 'a'를 빼버립니다.
그럼 현재 result = ['b'] 만 담겨있습니다.
i = 3;
result[result.length - 1] === result[0] 입니다. 'b' 하나 들어있기 때문입니다.
'b' 와 s.charAt(3) 을 비교하면 둘 다 'b' 입니다.
따라서 result.pop() 을 통해 result는 [] 빈 배열이 됩니다.
i = 4;
result는 빈배열이기 때문에 else로 넘어갑니다.
result.push(s.charAt(4)) 'a'를 넣어줍니다.
i = 5;
result[result.length - 1] === result[0] 그리고 현재 'a'만 담겨져있습니다.
s.charAt(5) === 'a' 입니다.
따라서 result.pop()을 통해 담겨있는 'a'를 제거합니다.

마지막으로 짝지어 모두 제거할 수 있는 경우 1을 반환하라고 했습니다.
짝지어 모두 제거 된 경우 result.length === 0 이 됩니다.
result.length === 0 ? 1 : 0
0이 된 경우 1을 반환하고 아니면 0을 반환해 문제를 해결합니다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글