알고리즘 문제/[프로그래머스]

[프로그래머스] 괄호 변환

latter2005 2021. 3. 10. 21:17

2020 카카오 블라인드 채용 코딩 테스트 문제입니다.

 

코딩테스트 연습 - 괄호 변환

카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를

programmers.co.kr

문제 확인

 

문제에서 주어진 대로 구현하면 되는 문제입니다.

 

풀이

 

올바른 문자열 인지 판단하는 방법은 문자열을 검색하면서 ( : +1, ) : -1을 해 주면서 값이 항상 양수라면 올바른 문자열, 한 번이라도 음수 값이 된다면 올바르지 못한 문자열이 됩니다.

 

괄호 문자 (, ) 은 아스키 값으로 72, 73이며 붙어있는 수 이므로 xor 1을 통해 간단하게 서로 바꿀 수 있습니다.

 

코드

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
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
bool check(string &s) {
    int count = 0;
    for (auto c : s)
        if ((count += c != ')' ? 1 : -1< 0)return false;
    return true;
}
string rec(string p) {
    if (p.empty())return p;//1
 
    string u, v;
    int i = 1, count = p[0!= ')' ? 1 : -1;
    while (i < p.length() && count)
        count += p[i++!= ')' ? 1 : -1;
    u = p.substr(0, i), v = p.substr(i);//2
 
    if (check(u))//3
        return u + rec(v);//3-1
    
    //4
    string t = string("("+ rec(v) + ")";//4 - 1, 2, 3
    for (int i = 1; i < u.length() - 1; i++)
        t += u[i] ^ 1;//4-4
    return t;//4-5
}
string solution(string p) {
    if (check(p))return p;
    return rec(p);
}
 
int main() {
 
    cout << solution(")(");
}
cs

정확성 테스트

테스트 1 통과 (0.01ms, 3.73MB)
테스트 2 통과 (0.01ms, 3.94MB)
테스트 3 통과 (0.01ms, 3.94MB)
테스트 4 통과 (0.01ms, 3.96MB)
테스트 5 통과 (0.01ms, 3.93MB)
테스트 6 통과 (0.01ms, 3.95MB)
테스트 7 통과 (0.01ms, 3.96MB)
테스트 8 통과 (0.01ms, 3.94MB)
테스트 9 통과 (0.01ms, 3.71MB)
테스트 10 통과 (0.01ms, 3.91MB)
테스트 11 통과 (0.02ms, 3.95MB)
테스트 12 통과 (0.02ms, 3.95MB)
테스트 13 통과 (0.02ms, 3.96MB)
테스트 14 통과 (0.02ms, 3.96MB)
테스트 15 통과 (0.03ms, 3.93MB)
테스트 16 통과 (0.05ms, 3.97MB)
테스트 17 통과 (0.03ms, 3.96MB)
테스트 18 통과 (0.05ms, 3.94MB)
테스트 19 통과 (0.09ms, 3.78MB)
테스트 20 통과 (0.06ms, 3.95MB)
테스트 21 통과 (0.04ms, 3.77MB)
테스트 22 통과 (0.02ms, 3.94MB)
테스트 23 통과 (0.06ms, 3.94MB)
테스트 24 통과 (0.02ms, 3.96MB)
테스트 25 통과 (0.03ms, 3.95MB)

채점 결과

정확성: 100.0

합계: 100.0 / 100.0

반응형