Learn & Run

[Programmers] 짝지어 제거하기 (Java) 본문

Algorithm/Programmers

[Programmers] 짝지어 제거하기 (Java)

iron9462 2021. 8. 23. 23:34

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

 

코딩테스트 연습 - 짝지어 제거하기

짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙

programmers.co.kr

문제

입력값으로 문자열 s가 주어집니다. 문자열에서 같은 알파벳이 2개 붙어있는 짝을 찾습니다. 그 다음, 그 둘을 제거 한뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거할 수 있는지 없는지 확인하는 문제입니다. 문자열을 모두 제거할 수 있으면 1을, 그렇지 않으면 0을 반환해줍니다.

 

접근 아이디어

1. 문자열의 각 인덱스 값을 Stack에 저장해줍니다.

2. Stack에 저장할 때, Stack이 비어있는지 peek()의 값과 비교를 통해서 짝이 지어지는지 아닌지 확인합니다.

3. 문자열이 모두 짝이 지어졌다는 것은 Stack이 비었다는 것을 의미하기 때문에 1, 그렇지 않은 경우는 0을 반환합니다.

 

조심해야할 점

Stack이 비어있지 않은 상태에서 peek()을 사용하지 않도록 주의하여야 합니다.

 

- Java

import java.util.*;

public class Solution {
    public int solution(String s) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (!stack.isEmpty() && stack.peek() == ch) {
                stack.pop();
            } else stack.add(ch);
        }

        return stack.isEmpty() ? 1 : 0;
    }
}

 

 

 

Java 채점 결과