Simple&Natural
2020 카카오 공채 코딩테스트 - 괄호 변환 본문
728x90
풀이과정)
문제에 풀이과정을 친절히 다 써놔서 그냥 순서대로 따라가며 코드로 구현만 하면 되는 문제였다.
재귀함수에 대한 개념을 알아야 풀 수 있는 문제이다.
일단 문제의 포인트를 짚어보자면
1. 균형잡힌 괄호 문자열
2. 올바른 괄호 문자열
이 두 가지를 판단하는 로직을 짤 수 있는가이다.
1번의 경우, "(" 와 ")" 의 갯수를 비교해주면서 두 괄호 요소의 갯수가 최초로 같아지는 시점을 골라내면 된다.
2번의 경우, 괄호 요소는 반드시 "(" 로 시작해야 하며 중간에 나오는 요소들은 한 번이라도 ")" 가 많아지면 안된다.
"(" 를 +1로, ")"를 -1로 가정하고 합계가 0보다 작아지는 지점이 존재한다면 이는 올바른 괄호 문자열이 아님을 의미한다.
사용 언어 : Kotlin
풀이)
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
fun reverser(u: String): String {
var newStr = ""
for(element in u) {
newStr = newStr.plus(when(element.toString()){
"(" -> ")"
")" -> "("
else -> ""
})
}
return newStr
}
fun isProperBracket(p: String): Boolean {
var checker = 0
for(element in p) {
when(element.toString()) {
"(" -> checker++
")" -> checker--
}
if(checker<0) {
return false
}
}
return true
}
fun solution(p: String): String {
var answer = ""
var headBrackets = 0
var tailBrackets = 0
// 1. 빈 문자열이면 그대로 반환
if(p.isBlank()) {
return p
}
// 2. 균형잡힌 두 문자열로 분리
for(index in p.indices) {
var aBracket = p.substring(index, index+1)
when(aBracket) {
"(" -> headBrackets++
")" -> tailBrackets++
}
if(headBrackets == tailBrackets) {
var u = p.substring(0, index+1)
var v = p.substring(index+1)
// 3. & 4.
if(isProperBracket(u)) {
u += solution(v)
}
else {
u = "(" + solution(v) + ")" + reverser(u.substring(1, u.length-1))
}
answer = u
break
}
}
return answer
}
|
cs |
728x90
'코딩테스트 풀이 > 카카오' 카테고리의 다른 글
2020 카카오 공채 코딩테스트 - 문자열 압축 (0) | 2020.08.26 |
---|---|
2019 카카오 개발자 겨울 인턴십 코딩테스트 - 튜플 (0) | 2020.04.09 |
2019 카카오 개발자 겨울 인턴십 코딩테스트 - 크레인 인형뽑기 게임 (0) | 2020.04.04 |
2020 카카오 공채 코딩테스트 - 가사검색 (0) | 2020.01.28 |
2017 카카오 공채 코딩테스트 - 추석 트래픽 (2) | 2020.01.24 |