문제 풀이 시간 : 20분, 틀린 횟수 : 1번 (스택에 괄호가 남아 있는 경우를 고려하지 않음 -> 이 경우 예시 ((((, [[{]] 이런 상황 )
문제 해결 point
1. 배열에서 열린 문자를 만난다면 스택에 넣기 ' ( ' , ' { ' , ' [ ' 경우에 해당한다.
2. 배열에서 닫힌 문자를 만난다면 2가지 경우의 수.
- 스택이 비어 있는 경우 -> 올바른 괄호 문자열을 만들 수 없음!
ex) 문자열이 "( ( } ) )" 이런 상황일때 발생 할 수 있다.
- 스택에서 pop한 값과 비교해서 한 쌍인지 맞춰보기 , 만약 한 쌍이 아니라면 올바른 괄호 문자열을 만들 수 없음!
올바른 괄호 문자열을 만들 수 있는 상황
ex) 스택에서 pop한 값이 ' ) ' 이면 ' ( ' 를 만나야 함
ex) 스택에서 pop한 값이 ' } ' 이면 ' { ' 를 만나야 함
ex) 스택에서 pop한 값이 ' ] ' 이면 ' [ ' 를 만나야 함
올바른 괄호 문자열을 만들 수 없는 상황
ex). 스택에서 pop한 값이 ' ] ' 인데 ' ( ' 인 경우
3. 반복문이 다 끝난 상황인데 스택이 비어있지 않은 경우 올바른 괄호 문자열을 만들 수 없다
ex) "[ [ ] ] [ [ " 이런 문자열일 경우 발생 할 수 있다. stack에 아직 ' [ ' , ' [ ' 두 개가 남아 있게 된다.
작성 코드
import java.util.Stack //Stack import 하기
fun solution_o(s: String): Int {
var answer: Int = -1
var array = s.toCharArray()
var count=0
for (i in 0 until array.size) {
var stack = Stack<Char>()
var check = 0
for (j in 0 until array.size) { // array[(i + j) % array.size 나머지 연산자를 사용하여 탐색 할 수 있도록 했다.
if (array[(i + j) % array.size] == '(' || array[(i + j) % array.size] == '{' || array[(i + j) % array.size] == '[') {
stack.push(array[(i + j) % array.size])
} else {
if (stack.empty()) {
check = 1
break
}
var value = stack.pop()
if (value == '(') {
if (array[(i + j) % array.size] == ')')
continue
else{
check=1
break
}
}
if(value == '{') {
if (array[(i + j) % array.size] == '}')
continue
else{
check=1
break
}
}
if (value == '[') {
if (array[(i + j) % array.size] == ']')
continue
else{
check=1
break
}
}
}
}
if(check==0&&stack.empty()){
count++
}
}
return count
}
'코딩테스트 준비(kotlin) > 자료구조' 카테고리의 다른 글
[kotlin, 프로그래머스] 베스트앨범 (0) | 2024.07.31 |
---|---|
[프로그래머스 kotlin] 다리를 지나는 트럭 (0) | 2024.07.09 |
[프로그래머스 kotlin] 롤케이크 자르기 (0) | 2024.07.01 |
[프로그래머스 kotlin] 기능개발 (0) | 2024.06.23 |
[kotlin] 백준 1874번 : 스택 수열 (0) | 2023.08.10 |