프로그래머스 Lv2. 짝지어 제거하기 (Java / Python)

eora21·2022년 9월 4일
0

프로그래머스

목록 보기
13/38

문제 링크

문제 간단 해석

같은 글자가 뭉치면 터지는 문제. stack을 활용하여 간단히 풀 수 있다.

Java

풀이 코드

import java.util.Stack;

class Solution {
    public int solution(String s) {
        
        Stack<Character> stack = new Stack();
        
        for(char ch: s.toCharArray()) {
            if (stack.isEmpty() || stack.peek() != ch)
                stack.add(ch);
            else
                stack.pop();
        }
        
        return stack.isEmpty() ? 1 : 0;
    }
}

해석

Stack<Character> stack = new Stack();

문자를 비교할 stack 생성.

for(char ch: s.toCharArray()) {
    if (stack.isEmpty() || stack.peek() != ch)
        stack.add(ch);
    else
        stack.pop();
}

s에서 한 글자씩 가져올 건데, idx를 활용해 charAt해도 되겠지만 foreach로 간단하게 수행하게끔 charArray로 만들어주었다.
stack이 비어있거나, stack의 마지막값이 현재 얻어온 값이랑 다르다면 stack에 글자를 추가했다.
하지만 stack의 마지막값과 이번 글자가 같다면 제거하도록 하였다.

return stack.isEmpty() ? 1 : 0;

스택이 비었다면(모든 글자가 터졌다면) 1을, 아니라면 0을 반환.

Python

풀이 코드

def solution(s):
    stack = []
    for ch in s:
        if stack and stack[-1] == ch:
            stack.pop()
        else:
            stack.append(ch)
        
    return 0 if stack else 1

해석

stack = []

stack 선언.

for ch in s:
    if stack and stack[-1] == ch:
        stack.pop()
    else:
        stack.append(ch)

s에서 한 글자씩 가져온다.
stack이 비어있지 않고, 마지막 글자가 ch랑 같다면 pop으로 제거, 아니라면 stack에 값을 추가한다.

return 0 if stack else 1

stack이 비어있지 않다면 0을, 아니라면 1을 반환.

profile
나누며 타오르는 프로그래머, 타프입니다.

0개의 댓글