프로그래머스
[프로그래머스][Kotlin]괄호 회전하기
끝까지 처음처럼
2022. 9. 26. 10:40
728x90
class Solution {
fun solution(s: String): Int {
var answer: Int = 0
var temp = s
for(i in 0 .. s.length-1){
var count1 = 1
var count2 = 1
var count3 = 1
for( j in 0 .. temp.length-1){
if(temp[j]=='(') {
count1++
if(j != temp.length-1){
if(temp[j+1] == ']' || temp[j+1] == '}') break
}
}
if(temp[j]=='[') {
count2++
if(j != temp.length-1){
if(temp[j+1] == ')' || temp[j+1] == '}') break
}
}
if(temp[j]=='{') {
count3++
if(j != temp.length-1){
if(temp[j+1] == ']' || temp[j+1] == ')') break
}
}
if(temp[j]==')') count1--
if(temp[j]==']') count2--
if(temp[j]=='}') count3--
if(count1 == 0 || count2 == 0 || count3 == 0) break
}
if(count1 == 1 && count2 == 1 && count3 == 1) answer++
temp = temp.slice(1 .. temp.length-1) + temp.first()
}
return answer
}
}
저의 현재 실력으로 푼 문제 답안이며, 가장 좋은 코드는 아닐 수 있으며, 코틀린을 공부하면서 추가적으로 알게 된 개념이 있어 다시 풀 경우 추가적으로 코드를 작성 할 수 있도록 하겠습니다.
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Deque를 사용하여 해당 문제를 다시 작성하였습니다.
import java.util.*
class Solution {
fun solution(s: String): Int {
var answer: Int = 0
var list = mutableListOf<Char>()
var count = 0
s.forEach{
list.add(it)
}
while(count != s.length){
count++
list.add(list[0])
list.removeAt(0)
var tempDeque = ArrayDeque<Char>()
var check = true
for(i in 0 .. list.size-1){
if(tempDeque.size >= 1){
when(tempDeque.peekLast()){
'[' -> if(list[i] == ']') {
tempDeque.removeLast()
check = false
}
'(' -> if(list[i] == ')') {
tempDeque.removeLast()
check = false
}
'{' -> if(list[i] == '}') {
tempDeque.removeLast()
check = false
}
}
}
if(check) {
tempDeque.add(list[i])
} else {
check = true
}
}
if(tempDeque.size == 0) answer++
}
return answer
}
}
기존에 작성한 코드와 새로 작성한 코드의 실행 결과 비교입니다.
기존 작성한 코드
테스트 1 〉 | 통과 (38.10ms, 65.6MB) |
테스트 2 〉 | 통과 (29.77ms, 65.5MB) |
테스트 3 〉 | 통과 (27.20ms, 67.8MB) |
테스트 4 〉 | 통과 (33.71ms, 65.8MB) |
테스트 5 〉 | 통과 (64.59ms, 66.3MB) |
테스트 6 〉 | 통과 (42.95ms, 65.5MB) |
테스트 7 〉 | 통과 (49.46ms, 66.3MB) |
테스트 8 〉 | 통과 (64.31ms, 66.1MB) |
테스트 9 〉 | 통과 (71.49ms, 66.7MB) |
테스트 10 〉 | 통과 (67.46ms, 67.8MB) |
테스트 11 〉 | 통과 (88.26ms, 66.1MB) |
테스트 12 〉 | 통과 (26.95ms, 64.4MB) |
테스트 13 〉 | 통과 (21.64ms, 63.1MB) |
테스트 14 〉 | 통과 (17.71ms, 64.3MB) |
새로 작성한 코드
테스트 1 〉 | 통과 (83.29ms, 62.5MB) |
테스트 2 〉 | 통과 (68.21ms, 59.6MB) |
테스트 3 〉 | 통과 (81.60ms, 61.4MB) |
테스트 4 〉 | 통과 (52.44ms, 60.5MB) |
테스트 5 〉 | 통과 (46.65ms, 59.3MB) |
테스트 6 〉 | 통과 (58.75ms, 60MB) |
테스트 7 〉 | 통과 (90.55ms, 59.7MB) |
테스트 8 〉 | 통과 (65.41ms, 59.7MB) |
테스트 9 〉 | 통과 (59.41ms, 59.9MB) |
테스트 10 〉 | 통과 (66.96ms, 59.8MB) |
테스트 11 〉 | 통과 (49.57ms, 60MB) |
테스트 12 〉 | 통과 (0.17ms, 60.2MB) |
테스트 13 〉 | 통과 (0.16ms, 58.7MB) |
테스트 14 〉 | 통과 (0.19ms, 60.7MB) |
새로 작성한 코드의 경우 기존 작성한 코드보다 실행시간이 늘어난 케이스가 많지만 작성하면서 느낀 점은 개인차가 있겠지만 처음 기존 작성한 코드보다 자체 디버깅을 하기가 훨씬 수월했다는 점입니다. 또한 괄호를 변경하는 점에서 mutableList를 사용하였는데 아직 공부가 모자라 다른 개념이 확 생각이 안난다는 점입니다. 해당 부분은 공부를 하다 새로 알게된 개념이 있을 경우 추가 작성할 수 있도록 하겠습니다.