반응형
문제
https://leetcode.com/problems/decode-string/
문제 풀기 전
- stack으로 풀 수 있겠다.
- ]문자가 나오기전까지 stack에 넣다가 나오면 pop한다. [문자가 나올대까지 하고 그다음 숫자를 나오게 해서 그려준다.
- 숫자는 한자리가 아니기때문에 숫자는 특별히 하나의 문자로 만들어서 stack에 넣어줬다.
직접 푼 풀이
소요시간: 36분(21:51 ~ 22:27)
class Solution {
public String decodeString(String s) {
LinkedList<String> stack = new LinkedList<>();
String sub = "";
for (int i=0; i<s.length(); i++) {
char cur = s.charAt(i);
if (cur == ']') {
String popped = "";
while(true) {
String temp = stack.pop();
if (temp.equals("[")) {
break;
}
popped = temp + popped;
}
Integer count = Integer.valueOf(stack.pop());
String repeat = popped+"";
for (int c=1; c<count; c++) {
popped = popped + repeat;
}
stack.push(popped);
} else if ('a' <= cur && cur <= 'z') {
stack.push(cur+"");
} else if (cur == '[') {
stack.push(sub+"");
sub = "";
stack.push(cur+"");
} else {
sub += cur;
}
}
String result = "";
while (!stack.isEmpty()) {
result = stack.pop() + result;
}
return result;
}
}
느낀점
- 풀긴 풀었는데 뭔가 깔금하지는 않다.
- Character.isDigit로 숫자 여부를 판단할 수 있고 보통 char에서 숫자를 나타낼때는 char - '0'로 하면 되는걸 기억해두자.
누적되는 알고리즘 접근 설명서
'알고리즘 풀이' 카테고리의 다른 글
.leetcode(208. Implement Trie (Prefix Tree)) (0) | 2021.01.27 |
---|---|
.leetcode(337. House Robber III) (0) | 2021.01.27 |
.leetcode(96. Unique Binary Search Trees) (0) | 2021.01.25 |
.leetcode(62. Unique Paths) (0) | 2021.01.22 |
.leetcode(64. Minimum Path Sum) (0) | 2021.01.21 |