[Python] 백준 31458번 : !!초콜릿 중독 주의!!

2025. 4. 2. 19:04

99클럽 코테 스터디 | 비기너 | 3일차



처음 접근 방법

우선 처음 문제를 봤을 때 지레짐작으로 문제를 잘못 생각한 부분이 있다. 예제 입력에서 입력값이 7개인데 예제 출력에서는 6개만 입력이 되어서 '아~ '6'과 같이 0과 1이 아닌 숫자를 입력하면 아무것도 출력되지 않는구나' 라고 혼자 단단히 오해를 했다. 이 것 때문에 문제를 더 복잡하게 풀었는데, 나중에 뭔가 이상해서 다시 문제를 읽어보니.. 맨 윗줄의 입력값은 수식의 개수 T를 의미하는 것이었다.. 문제를 제대로 읽자....ㅎ.ㅎ

 

개선 방법

오해를 바로잡은 후, 접근했던 방식은 아래와 같다.

 

1. 왼쪽 느낌표의 개수, 오른쪽 느낌표의 개수를 각각 left_count, right_count로 센다

2. 가운데 숫자를 num으로 저장한다

3. is_right boolean을 두어서 숫자에서 느낌표로 전환되는 지점에서 right_count를 셀 수 있도록 한다 

4. 연산에서 right_count가 우선순위이므로, 먼저 고려하되 1개 이상이면 무조건 num은 1로 변환한다

5. left_count가 홀수일 경우, 숫자 반전을 시킨다 (이 때, num = 1 - num 구문을 통해 반전하는 간편한 방식은 지피티를 통해 새로 배웠다)

 


def solution(input_list):
    answer = []

    for t in range(len(input_list)):
        num = 0
        left_count = 0
        right_count = 0
        is_right = False

        for i in input_list[t]:
            if is_right:
                if i == "!":
                    right_count += 1
            elif i == "!":
                left_count += 1
            elif i.isdigit():
                num = int(i)
                is_right = True

        if right_count >= 1:
            num = 1

        if (left_count % 2) != 0:
            num = 1 - num

        answer.append(num)

    for a in answer:
        print(a)

    return

T = int(input())

input_list = []
for _ in range(T):
    t = input().strip()
    input_list.append(t)

solution(input_list)

BELATED ARTICLES

more