안녕하세요. 이번에는 프로그래머스 괄호 회전하기 문제를 풀어보려고 합니다.
Problem
https://school.programmers.co.kr/learn/courses/30/lessons/76502
Solution
import java.util.Stack
class Solution {
fun solution(s: String): Int {
var answer: Int = 0
for(i in s.indices) {
var stack = Stack<Char>()
var checkPoint: Boolean = true
val temp = (s + s).slice(i until s.length + i).toMutableList()
for(j in temp.indices) {
val char = temp[j]
if(char == '(' || char == '[' || char == '{') {
stack.push(char)
} else {
if(!isRight(char, stack)) {
checkPoint = false
break
}
}
}
if(stack.isEmpty() && checkPoint) {
answer++
}
}
return answer
}
fun isRight(char: Char, stack: Stack<Char>): Boolean {
if(stack.isEmpty()) {
return false
}
if(char == ')') {
if(stack.peek() == '(') {
stack.pop()
} else {
return false
}
} else if(char == ']') {
if(stack.peek() == '[') {
stack.pop()
} else {
return false
}
} else if(char == '}') {
if(stack.peek() == '{') {
stack.pop()
} else {
return false
}
}
return true
}
}
이번 문제는 Stack을 활용해서 문제를 접근해 보았습니다. 이번 문제는 백준에서 풀었던 괄호 문제가 있어서 쉽게 풀 수 있었습니다. 백준 문제를 참고하려면 아래의 링크를 참고하세요.
https://echung93.tistory.com/entry/CLASS-2-9012-%EA%B4%84%ED%98%B8-JAVA
하지만 여기서 중요한 거는 '[', '{', '(' 이 3가지의 괄호가 나오기 때문에 이 3가지를 판단해 주는 isRight 함수를 추가해 줬습니다.
1. 다른 사람 코드
class Solution {
fun solution(s: String): Int {
var answer: Int = 0
for(i in 0..s.length - 1) {
var tmp = s.substring(i) + s.substring(0, i)
if(isRight(tmp)) {
answer += 1
}
}
return answer
}
fun isRight(str: String): Boolean {
var list = mutableListOf<Char>()
var endCh = charArrayOf(']', ')', '}')
for(ch in str) {
if(endCh.contains(ch)) {
if(list.isEmpty()) {
return false
}
var tmp=list.removeAt(list.size - 1)
when(ch) {
']' -> if(tmp != '[') return false
')' -> if(tmp != '(') return false
'}' -> if(tmp != '{') return false
}
} else {
list.add(ch)
}
}
return list.size == 0
}
}
Performance
1. 내가 작성한 코드 | 2. 다른 사람 코드 |
반응형
'프로그래머스 Algorithm' 카테고리의 다른 글
[프로그래머스] n^2 배열 자르기 Kotlin (0) | 2024.01.10 |
---|---|
[프로그래머스] 할인 행사 Kotlin (0) | 2024.01.04 |
[프로그래머스] 카드 뭉치 Kotlin (0) | 2024.01.02 |
[프로그래머스] 연속 부분 수열 합의 개수 Kotlin (2) | 2023.12.30 |
[프로그래머스] 명예의 전당 Kotlin (0) | 2023.12.29 |