[Java] Lv2_짝지어 제거하기

Updated:

Categories:

Tags: ,

📌 개인적인 공간으로 공부를 기록하고 복습하기 위해 사용하는 블로그입니다.
정확하지 않은 정보가 있을 수 있으니 참고바랍니다 :😸
[틀린 내용은 댓글로 남겨주시면 복받으실거에요]

[Java] Lv2_짝지어 제거하기

풀어보기🔗

1️⃣처음 푼 문제 : 실패

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
class Solution {
    public int solution(String s) {
        int answer = 0;
        
        StringBuilder str = new StringBuilder(s);
        
        //중복 존재하는지 확인, 이전 문자 저장
        char c = s.charAt(0);
        
        for(int i = 1; i < str.length(); i++) {
            if (s.charAt(i) == c) {
                // 같다면 제거
                str = str.delete(i-1, i);  //bbaa 그럼 다시 돌아야하는데.
                if (str.length() > 0) {
                    i = 0;
                    c = str.charAt(0);   
                } else {
                    return 1;
                }
                
            } else {
             //다르다면 현재 문자 다시 저장
                c = str.charAt(i);
            }
        }

        return answer;
    }
}

이렇게 하면 문자열이 줄어들면서 istr.length()가 계속 변화하지만, for문에서의 조건 i < str.length()가 처음 설정된 str.length() 기준으로 진행되기 때문에 중간에 놓치는 부분이 생길 수 있다.

무튼… 내가 생각해도 허점이 많아서 while 문으로 해야 되나 생각…하고 다시 풀었다

while 로 변경

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
    public int solution(String s) {
        
        StringBuilder str = new StringBuilder(s);
        
        int i = 0;
        
        while(i < str.length() - 1) {
            if (str.charAt(i) == str.charAt(i+1)) {
                // 같다면 제거
                str = str.delete(i, i+2);  //첨부터 다시 돌아야함.
                i = (i > 0) ? i-1 : 0; 
            } else {
                i++;
            }  
        }
        
        return str.length() == 0 ? 1 : 0;
    }
}

ㅎ효율성…이자식…

스택으로 풀어보기

아.. 효율성 어쩌지 생각하다가.. 요새 계속 stack으로 풀었는데 왜 생각 못했는지 모르겠지만…갑자기..아 스택이였네..하고 생각함😥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.Stack;

class Solution {
    public int solution(String s) {

        Stack<Character> stack = new Stack<>();

        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            if (!stack.isEmpty() && stack.peek() == c) {
                stack.pop();
            } else {
                stack.push(c);
            }
        }
        return stack.isEmpty() ? 1 : 0; 
    }
}

근데 import 문 *으로 하나 개별지정하나 상관 없겠지..? 라고 생각하고 검색했는데

코드컨벤션에 따라 다른 것 같고 개별 지정해주는게 좋다는 글이 더 많았다…

앞으로는 개별로 지정해야 될 것 같다.


깃허브 고장났나…왜 노란색이야 했는데

알고보니 할로윈 이벤트당~🎃🎃

Programmers 카테고리 내 다른 글 보러가기

Leave a comment