본문 바로가기

알고리즘/Kakao

[카카오 코딩 테스트] 괄호 변환

https://tech.kakao.com/2019/10/02/kakao-blind-recruitment-2020-round1/

 

2020 신입 개발자 블라인드 채용 1차 코딩 테스트 문제 해설

올해에도 2020이라는 멋진 숫자와 함께, 카카오의 신입 개발자 채용을 시작했습니다! 그 여정 중 첫 단계로 1차 코딩 테스트가 지난 9월 7일 토요일 오후 2시부터 오후 7시까지 5시간 동안 진행됐는데요. 저희 준비위원들도 설렘과 긴장 속에 원활한 진행을 위해 노력했고, 무사히 1차 테스트를 마칠 수 있었습니다. 테스트에는 총 7문제가 출제됐고, 응시자는 5시간 이내에 순서와 상관없이 문제를 해결해야 했습니다. 문제의 배치는 작년과 마찬가지로 쉬운 난이

tech.kakao.com

2번 괄호 변환 문제입니다.

 

문제 그대로 따라하기만 하면 되는 문제이지만, 생각보다 정답률은 낮은 문제네요.

 

재귀에 대해 이해만 하고 있다면 문제에서 말하는 순서대로 따라만 하면 쉽게 풀리는 문제였습니다.

 

아래는 해당 코드이고 각 단계별로 주석 달아두었습니다.

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
#include <iostream>
#include <string>
#include <vector>
#include <stack>
 
using namespace std;
 
bool isCorrect(string p) {
    stack<char> s;
    for (int i = 0; i < p.length(); i++) {
        if (p[i] == '(')
            s.push('(');
        else {
            if (s.empty())
                return false;
            else
                s.pop();
        }
    }
    return s.empty();
}
 
string divide(string p) {
    // 1번
    if (p.length() == 0return "";
 
    // 2번
    string u, v;
    int left = 0, right = 0;
    for (int i = 0; i < p.length(); i++) {
        if (p[i] == '(') left++;
        else right++;
        if (left == right)
            break;
    }
    u = p.substr(0, left + right);
    v = p.substr(left + right, p.length());
    // 3번
    if (isCorrect(u)) {
        // 3-1번
        return u += divide(v);
    }
    // 4번
    else {
        // 4-1번
        string tmp = "(";
        // 4-2번
        tmp += divide(v);
        // 4-3번
        tmp += ")";
        // 4-4번
        u = u.substr(1, u.length() - 2);
        for (int i = 0; i < u.length(); i++) {
            if (u[i] == '(') tmp += ")";
            else tmp += "(";
        }
        // 4-5번
        return tmp;
    }
}
 
string solution(string p) {
    string answer = divide(p);
    return answer;
}
int main() {
    string p = "()))((()";
    cout << solution(p);
    return 0;
}
cs

 

질문이나 지적사항은 댓글 부탁드립니다 :)