[짝지어 제거하기] 코딩테스트 연습 > 2017 팁스타운 > 짝지어 제거하기
※ 주의 : 문제풀이 방법은 다양합니다. 참고만 해주세요 ※
[문제설명]
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다.
이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.
예를 들어, 문자열 S = baabaa 라면
b aa baa → bb aa → aa →
의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.
제한사항
- 문자열의 길이 : 1,000,000이하의 자연수
- 문자열은 모두 소문자로 이루어져 있습니다.
입출력 예
입출력 예 설명
입출력 예 #1
위의 예시와 같습니다.
입출력 예 #2
문자열이 남아있지만 짝지어 제거할 수 있는 문자열이 더 이상 존재하지 않기 때문에 0을 반환합니다.
[간단설명]
주어진 문자열에서 중복된 문자를 모두 제거할 수 있는지 판별하기
[접근방법]
** 스택활용
1. 스택을 만든다.
2. 문자열을 하나씩 검사한다.
3. 스택에 넣은 문자와 현재 문자가 같으면 스택에서 꺼낸다.
4. 스택이 비었거나, 현재 문자와 다르면 스택에 넣는다.
5. 스택 사이즈가 0이면, 모두 제거된 상태(1 리턴)
6. 스택 사이즈가 0보다 크면, 문자가 남은 상태(0 리턴)
[주의사항]
중복 문자를 제거하는 과정에서 이중 For문을 사용하게 되면, 효율성 테스트에서 떨어진다.
스택을 활용하자.
[소스공개]
import java.util.*;
class Solution
{
public int solution(String s)
{
// 중복 문자 확인용 스택
Stack<Character> stack = new Stack<>();
// 문자열 반복
for(char word : s.toCharArray()){
// 문자열이 같으면, 스택에서 꺼낸다
if(!stack.isEmpty() && word==stack.peek()){
stack.pop();
// 문자열이 다르면, 스택에 넣는다.
}else{
stack.push(word);
}
}
// 스택 사이즈가 0이면 모두 제거된 상태
// 스택 사이즈가 0보다 크면, 제거하고 남은 문자열이 있는 상태
// 즉, 더이상 제거할 수 없는 상태
return stack.size()>0?0:1;
}
}
[실행결과]
'코딩 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/JAVA] 코딩테스트 연습 > 연습문제 > N개의 최소공배수 (by 다알쥐AI) (0) | 2024.11.13 |
---|---|
[프로그래머스/JAVA] 코딩테스트 연습 > Summer/Winter Coding(~2018) > 점프와 순간 이동 (by 다알쥐AI) (0) | 2024.11.12 |
[프로그래머스/JAVA] 코딩테스트 연습 > 연습문제 > 피보나치 수 (by 다알쥐AI) (0) | 2024.11.11 |
[프로그래머스/JAVA] 코딩테스트 연습 > 연습문제 > 다음 큰 숫자(by 다알쥐AI) (0) | 2024.11.10 |
[프로그래머스/JAVA] 코딩테스트 연습 > 연습문제 > 숫자의 표현 (by 다알쥐AI) (1) | 2024.11.10 |