inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

38군데 합격 비법, 2026 코딩테스트 필수 알고리즘

5-4. 카카오 신입 개발자 블라인드 채용 1차 코딩테스트 - 2

5-4. 카카오 신입 개발자 블라인드 채용 1차 코딩테스트 - 2 질문입니다.

해결된 질문

289

이가희

작성한 질문수 2

0

1. 현재 학습 진도

 

2. 어려움을 겪는 부분

 

3. 시도해보신 내용

from collections import deque

def is_this_correct_parentheses(string):

    N = len(string)

    left_parentheses_num = 0
    for s in string:
        if s == "(":
            left_parentheses_num += 1

    if left_parentheses_num == N-left_parentheses_num:
        return 1
    else:
        return 0

def is_this_balanced_parentheses(string):
    stack = []
    stack.append(string[0])
    string = string[1:]
    for s in string:
        tmp = s
        if len(stack) != 0 and stack[-1] == "(" and tmp == ")":
            stack.pop()
        else:
            stack.append(tmp)

    if len(stack) == 0:
        return 1
    else:
        return 0

def u_string_processing(u):
    u = u[1:-1]
    tmp_u = ""
    for i in range(len(u)):
        if u[i] == "(":
            tmp_u += ")"
        else:
            tmp_u += "("
    return tmp_u


def get_correct_parentheses(balanced_parentheses_string):

    W = balanced_parentheses_string

    if W == "":
        return ""

    idx = 0
    for i in range(1, len(W)):
        tmp_u = W[:i]
        if is_this_correct_parentheses(tmp_u) == 1:
            idx = i
            break
    if len(W) == 2:
        idx = 2
    u = W[:idx]
    v = W[idx:]

    if is_this_balanced_parentheses(u) == 1:
        processed_v = get_correct_parentheses(v)
        return u+processed_v
    elif is_this_balanced_parentheses(u) == 0:
        tmp_string = "("
        processed_v = get_correct_parentheses(v)
        tmp_string += (processed_v + ")")
        tmp_string += u_string_processing(u)
        return tmp_string

    return W

 

이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊

python 코딩-테스트 알고리즘 data-structure

답변 1

0

딩코딩코

안녕하세요 가희님! 좋은 질문 주셔서 감사합니다!!

 

먼저, 문제의 핵심 부분을 다시 살펴보겠습니다.

  • 매개변수로 주어지는 p는 균형잡힌 괄호 문자열입니다.

  • 알고리즘 내에서 w를 분리할 때는 '균형잡힌 괄호 문자열'인 u와 나머지 v로 분리합니다.

예시로 주신 "))()(" 케이스를 봅시다:

  1. 이 문자열은 '('가 2개, ')'가 3개로 균형잡힌 괄호 문자열이 아닙니다.

  2. 따라서 이 문자열이 매개변수 p로 주어지는 경우는 문제의 조건에 맞지 않습니다.

문제는 균형잡힌 괄호 문자열 p가 주어졌을 때, 이를 올바른 괄호 문자열로 변환하는 알고리즘을 구현하는 것입니다. 따라서 W 는 반드시 균형잡힌 괄호 문자열이라고 가정하고 풀어야 할 것 같습니다!

 

아마 가희님께서 구현하신 코드를 보면,

코드에서 is_this_correct_parentheses 함수는 '균형잡힌 괄호 문자열'인지 확인합니다 (열린 괄호와 닫힌 괄호의 개수가 같은지).

하지만 루프에서 tmp_u = W[:i]로 분리할 때, 이 부분 문자열이 균형잡힌 괄호 문자열인지 확인한 후 바로 break하면, "더 이상 분리할 수 없는" 조건을 만족시키지 못할 수 있습니다.

 

즉 제시된 코드는 균형잡힌 괄호 문자열을 올바르게 찾지 못하는 경우가 있어, 예시 "))()(" 같은 입력에서 오류가 발생할 수 있습니다. 그런데 이 예시는 애초에 균형잡힌 괄호 문자열이 아니라서 문제의 전제 조건을 위반합니다.

 

실전에서는 이런 전제조건에 따라 구현방향성이 매우 갈리는 경우가 많아서, 전제조건에 맞춰서만 구현하는 것을 권장드립니다!

 

알고리즘 학습 시에는 "만약 이 전제조건이 깨지는 상황에서는 어떻게 하면 문제를 해결할 수 있을까?" 라는 가정을 열어보면서 문제를 해결해보시는 것도 좋을 것 같습니다! 요 관점에서 트라이해보신거라면
짱입니당

코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요

0

55

2

3-3 정렬-2 선택정렬 로직

0

36

2

링크드 리스트 끝에서 k번째 값 출력하기

0

42

2

LinkedList 과제 Fast, slow 포인터

0

49

2

투포인터 시간복잡도

0

50

2

수강평 작성 후 자료

0

50

2

수업교재 링크 오류

2

106

2

프로그래머스에서 제출 후 채점시 틀림ㅠ

0

127

2

1-10 알고리즘 더 풀어보기(2) 질문 있습니다

0

69

2

문제 풀이 방식 관련 질문입니다!

0

81

2

1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다

0

86

2

수업자료 pdf 받고싶습니다

0

103

2

강의 자료 오류 수정

0

70

1

2-10 더하거나 빼거나 관련 질문입니다

0

61

2

3-8 해쉬 -2

0

48

2

Linked List Element Delete Explanation Problem

0

66

2

강의3-4 스택 탑 문제

0

74

2

코드스니펫 입출력 케이스에 오류가 있는것 같아요

0

98

3

링크드 리스트 원소 찾기 구현 방식 질문드립니다.

0

74

2

1874 - 스택 문항

0

80

2

DP Java 예제 자료형 오버플로우 문제

0

97

2

4-9 4주차 숙제중 농심라면 문제

0

109

2

DFS 에서 스택을 사용하는 이유

1

183

3

들여쓰기가 햇갈리네요

0

120

2