반응형
https://programmers.co.kr/learn/courses/30/lessons/12973
[ 코드 ]
import java.util.*;
class Solution {
public int solution(String s) {
Stack<Character> stack = new Stack<Character>();
for (char c : s.toCharArray()) {
if(stack.isEmpty() || stack.peek() != c) {
stack.add(c);
}else {
stack.pop();
}
}
int answer = 0;
if (stack.isEmpty()) answer = 1;
return answer;
}
}
Stack을 이용하는 문제였다.
그리고 Stack<String>으로 짜면
현재 자신의 문자를 볼 때
String.valueOf(s.charAt(i));
이런 식으로 확인해야하는 불편함이 있어서
Stack<Character>로 짜는것이 더 효율적인 것 같다.
[ 또 다른 정답 코드 ]
class Solution{
public int solution(String s){
StringBuilder sb = new StringBuilder();
for(int i = 0; i < s.length(); i++) {
if(sb.length() != 0 && sb.charAt(sb.length() - 1) == s.charAt(i)) {
sb.delete(sb.length() - 1, sb.length());
} else {
sb.append(s.charAt(i));
}
}
return sb.length() == 0 ? 1 : 0;
}
}
Stack이 치명적인 단점이 발견되어 JAVA에서 점점 비권장 라이브러리로 가고있는 추세라고 한다.
StringBuilder를 이용한 코드도 올린다.
[ 틀린 코드 ]
class Solution {
static int result;
public int solution(String s) {
result = 0;
if(s.length()%2 != 0){
return result;
}
erase(0, s);
return result;
}
static void erase(int n, String s) {
for(int i=n; i<s.length(); i++) {
if(i+1<s.length() && s.charAt(i)==s.charAt(i+1)) {
if(s.length()==2) {
result = 1;
return;
}else if(i==0) {
s = s.substring(i+2, s.length());
erase(i, s);
}else {
s = s.substring(0, i) + s.substring(i+2, s.length());
erase(i-1, s);
}
}
}
}
}
※ 오늘의 교훈
DFS, BFS, ArrayList만 말고 Stack으로도 접근해보자.
메소드
String.valueOf(s.charAt(i));
하지만 더 쉽게for문 안에서 s.toCharArray() 을 이용할 수 있다.
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 문자열 내림차순으로 배치하기 / java (0) | 2021.07.15 |
---|---|
[프로그래머스] 숫자 문자열과 영단어 / java (0) | 2021.07.09 |
[프로그래머스] 위장 / java (0) | 2021.07.01 |
[프로그래머스] H-Index / java (0) | 2021.06.14 |
[프로그래머스] 여행경로 / java (0) | 2021.06.13 |