반응형
사이트명 : 프로그래머스(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;
}
}
반응형
'Language > 알고리즘 문제풀이' 카테고리의 다른 글
프로그래머스 완주하지 못한 선수 자바 문제풀이 (0) | 2021.10.28 |
---|---|
프로그래머스 피보나치 수(Java) (0) | 2019.10.16 |
프로그래머스 N개의 최소공배수(Java) (0) | 2019.09.29 |
프로그래머스 폰켓몬(Java) (0) | 2019.09.29 |
프로그래머스 예산(Java) (0) | 2019.09.24 |
댓글