Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- leetcode
- Kotlin
- FRAGMENT
- Database
- sourcetree
- Algorithm
- rxjava
- github
- git
- Jetpack
- Room
- Java8
- library
- Java
- androidstudio
- Version
- homebrew
- livedata
- ViewModel
- IntelliJ
- Android
- programmers
- ReactiveProgramming
Archives
- Today
- Total
Learn & Run
[Programmers] 짝지어 제거하기 (Java) 본문
https://programmers.co.kr/learn/courses/30/lessons/12973
문제
입력값으로 문자열 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;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 전화번호 목록 (Java) (0) | 2021.08.25 |
---|---|
[Programmers] 문자열 압축 (Java, Kotlin) (0) | 2021.08.24 |
[Programmers] 기능 개발 (Java, Kotlin) (0) | 2021.08.23 |
[Programmers] 거리두기 확인하기 (Java, Kotlin) (1) | 2021.08.16 |
[Programmers] 2개 이하로 다른 비트 (Java, Kotlin) (0) | 2021.08.15 |