IT's 우

[java] 프로그래머스 - 짝지어 해결하기 본문

알고리즘/프로그래머스

[java] 프로그래머스 - 짝지어 해결하기

디우 2023. 8. 1. 16:45
728x90

📖 풀이한 문제

 

프로그래머스

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

programmers.co.kr


💡 문제에서 사용된 알고리즘

  • 스택

📜 코드 설명

  • 스택의 후입선출구조를 이용해서 문제를 풀어주었다.
  • 스택이 비어있다면 문자를 넣어주었다.
  • 스택이 비어있지 않다면 스택에 최근에 들어왔던 문자(peek)와 현재 문자가 같다면 짝지어진 문자이므로 스택 pop을 해주었다. 같지 않다면 현재 문자를 스택에 넣어주었다.
  • 위 과정을 문자열의 문자를 하나씩 확인해주며 반복해 주고 반복문이 끝나고 스택이 비어있다면 짝지어 모두 제거를 성공한 것이 아니라면 실패한 것이다.

 


📜 코드 

import java.util.*;
class Solution
{
    public int solution(String s)
    {
        // s를 문자 배열로 변환
        char [] c = s.toCharArray();

        // 문자를 담아서 최근에 들어온 문자와 비교하여 짝인지 확인하기 위해 스택 사용
        Stack<Character> sk = new Stack<>();
        // 문자열 길이
        int len = s.length();
        // 문자를 하나씩 넣으며
        // 스택이 비었다면 비교할 문자가 없기 때문에 넣고
        // 스택이 비어있지 않다면 최근에 넣었던 문자가 현재 비교할 문자와 같다면 pop하고
        // 같지 않더라면 현재 문자를 스택에 넣는다.
        for (int i = 0; i < len; i++) {
            if (sk.isEmpty()) {
                sk.push(c[i]);
            } else if (sk.peek() == c[i]) {
                sk.pop();
            } else {
                sk.push(c[i]);
            }
        }
        
        // 스택이 비었더라면 모두 짝지었기 때문에 성공, 아니라면 실패
        int answer = sk.isEmpty() ? 1 : 0;

        return answer;
    }
}
728x90
반응형