[Java] Lv2_짝지어 제거하기
Categories: Programmers
Tags: CodingTest, 실습
📌 개인적인 공간으로 공부를 기록하고 복습하기 위해 사용하는 블로그입니다.
정확하지 않은 정보가 있을 수 있으니 참고바랍니다 :😸
[틀린 내용은 댓글로 남겨주시면 복받으실거에요]
[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;
}
}
이렇게 하면 문자열이 줄어들면서 i
와 str.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 문 *으로 하나 개별지정하나 상관 없겠지..? 라고 생각하고 검색했는데
코드컨벤션에 따라 다른 것 같고 개별 지정해주는게 좋다는 글이 더 많았다…
앞으로는 개별로 지정해야 될 것 같다.
깃허브 고장났나…왜 노란색이야 했는데
알고보니 할로윈 이벤트당~🎃🎃
Leave a comment