본문 바로가기
Language/알고리즘 문제풀이

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

by wakestand 2019. 10. 16.
반응형

사이트명 : 프로그래머스(Programmers)

문제명 : 짝지어 제거하기

언어 : 자바(Java)

 

같은 알파벳이 두개가 붙어있다면 두 알파벳을 제거하는데

모든 알파벳을 제거 가능하다면 1

모두 제거를 못했으면 0을 반환하는 문제다

 

내 풀이방법은 아래와 같은데

 

Stack을 사용해서 문제를 풀어줬다

 

먼저 스택은 LIFO(Last In First Out) 방식으로 값을 처리하게 되는데

 

한글자씩 잘라서 스택에 넣어주다가

넣어준 글자와 다음 글자를 비교해서 같으면

스택에 들어간 글자를 pop으로 지우고

아니면 스택에 push로 쌓아주고 이런 식으로 진행이 가능하다

 

for 문을 돌려 String을 글자 하나씩 잘라 넣어주면서

스택에 아무 값이 없거나, 현재 글자와 다음 글자가 다르다면

스택에 push로 넣어주고 같을 시에는 pop으로 현재 들어있던 글자를 제거해 준다

 

for 문을 돌린 후에 글자가 다 pop 되어서

스택이 비었는지를 체크하는 stack.isEmpty()가 true로 나올 경우에는

1을 반환하고 그렇지 않을 경우에는 0을 반환하면 된다

 

마지막으로 프로그래머스에 바로 적용 가능한 코드는 아래와 같다

 

import java.util.Stack;

class Solution
{
    public int solution(String s) {
   	int answer = 0;
   	
   	Stack<String> stack = new Stack<>();
   	
   	for(int i = 0; i<s.length(); i++) {
   		
   		// Stack 사용
   		// 1. Stack이 비었을 경우에는 push
   		// 2. Stack의 peek() 값과 다음 글자가 같을 경우에는 pop으로 제거 (삽입할 필요 X)
   		// 3. Stack의 peek() 값과 다음 글자가 다를 경우에는 push
   		if(stack.isEmpty()) {
   			stack.push(s.substring(i, i+1));
   		} else if(stack.peek().equals(s.substring(i, i+1))){
   			stack.pop();
   		} else {
   			stack.push(s.substring(i, i+1));
   		}
   		
   	}
   	
   	// 문자열 모두 제거 시 1 아닐경우 0 반환
   	if(stack.isEmpty()) {
   		answer = 1;
   	} else {
   		answer = 0;
   	}
       return answer;
    }
}
반응형

댓글