알고리즘/프로그래머스
프로그래머스Lv2 - 짝 지어 제거하기 - JAVA
놀이방사장님
2023. 11. 23. 00:00
728x90
반응형
안녕하세요 놀이방 사장입니다.
이번 포스팅은 프로그래머스
Lv2 - 짝 지어 제거하기 포스팅입니다.
문자열 s를 기준으로 똑같은 문자가 붙어있으면 제거를 해줍니다. 그렇게 문자열이 다 사라지면 1 다 사라지지 않으면 0을 반환해줍니다.
이게 2개가 짝이 지어지면 스택을 생각했어야했는데 for문으로 풀어야겠다 생각이 들어서 for으로 풀었다가 정답은 맞아도 시간초과가 나더라구요
/*
* 시간초과 나는 코드
* */
class Solution
{
public int solution(String s)
{
int answer = -1;
StringBuffer str = new StringBuffer(s);
for(int i=0; i<str.length()-1; i++){
if(str.charAt(i) == str.charAt(i+1)){
str.delete(i, i+2);
i=-1;
}
}
if(str.length() == 0){
answer = 1;
}else{
answer = 0;
}
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println(str);
return answer;
}
}
이게 처음에 제가 짠 코드입니다.
근데 이렇게 쓰면 문자열길이가 길어서 시간초과가 납니다.
일단 찾아보니깐 저기 delete메소드도 오래걸리고 다시 for인덱스를 처음부터 돌리니깐 시간초과가 나는 거 같아요
그래서 좀 찾아보니깐 스택이 있더라구요
스택으로 푸니깐 다행히 풀리더라구여
import java.util.Stack;
/*
* 정답 코드
* */
class Solution
{
public int solution(String s)
{
Stack<Character> stack = new Stack<>();
int answer = -1;
for(int i =0; i<s.length(); i++){
if(!stack.isEmpty() && stack.peek() == s.charAt(i)){
stack.pop();
}else{
stack.push(s.charAt(i));
}
}
if(stack.isEmpty()){
answer = 1;
}else{
answer = 0;
}
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("Hello Java");
return answer;
}
}
제 생각엔 이코드가 제일 흔한 풀이방법일 거 같네요
이상으로 짝지어 제거하기 포스팅을 마치겠습니다.
반응형