개발공부/코딩테스트 연습문제
[프로그래머스] Level.2 - 짝지어 제거하기
ku-na
2022. 1. 19. 13:54
문제 설명과 제한사항


풀이_1차
class Solution
{
public int solution(String s)
{
int tmp = s.length();
while(s.length() > 0){
for(int i = 0; i < s.length()-1; i++){
if(s.charAt(i) == s.charAt(i+1)){
if(i > 0) {
s = s.substring(0,i) + s.substring(i+2);
}
else s = s.substring(i+2);
break;
}
}
if(tmp == s.length()) return 0;
else tmp = s.length();
}
return 1;
}
}
++
굉..장한 하드코딩..!
그래서 결과는 짜잔?~

효율성이 개똥이다. 그리하여 효율성 있게 고쳐보고자 한다.
class Solution
{
public int solution(String s)
{
int tmp = s.length();
int i = 0;
while(s.length() > 0){
if(i == s.length() - 1) return 0;
if(s.charAt(i) == s.charAt(i+1)){
s = s.replace(s.substring(i,i+2), "");
i = 0;
}
else i++;
}
return 1;
}
}
++
짜잔~ 깔끔한 쓰레기가 됐습니다

하나는 통과했어..? 왜..?
+++
마지막 풀이
import java.util.Stack;
class Solution
{
public int solution(String s)
{
Stack<String> tack = new Stack<String>();
String tmp;
for(int i = 0; i < s.length(); i++){
tmp = s.substring(i,i+1);
if(tack.isEmpty()) tack.push(tmp);
else{
if(tack.peek().equals(tmp)){
tack.pop();
}
else tack.push(tmp);
}
}
if(tack.isEmpty()) return 1;
else return 0;
}
}
사실 이문제는 스택을 몇번 활용해 본 사람이면 너무나도 달콤하게 느껴져서 스택을 사용하게 만드는 문제였던 것 같다.
위에 더러운 코드들을 작성할때 한 8라인쯤..? 에서 아.. 쒸.. 그냥 스택 쓸까 했는데 귀찮았다. 그래서 저 상태에서 깔끔하게 만들고 싶었는데 실패해서.. 결국 스택으로 풀었다..

스택으로 풀었을때 성능이다.