코딩 테스트/Baekjoon

S2 1541. 잃어버린 괄호

  • -
728x90
반응형

문제 보기 :  1541번: 잃어버린 괄호


문제

  • 정답률 : 54%


작성 코드

st = list(input())
answer = 0
change = False
num = ''

#초기 부호
if st[0]=='-':
    sign = '-'
else:
    sign = '+'

for i in range(len(st)):
    # 괄호 열기
    if st[i] == '-' and not change:
        change = True
        if sign == '-':
            answer -= int(num)
        else:
            answer += int(num)
        sign = '-' #다음 차례는 이걸로 확인
        num = ''
    # 부호 변경, 괄호 내부일 때
    elif st[i] == '+' and change:
        if sign == '-':
            answer -= int(num)
        else:
            answer += int(num)
        sign = '-' #다음 차례는 이걸로 확인
        num = ''
    elif st[i] == '+' and not change:
        if sign == '-':
            answer -= int(num)
        else:
            answer += int(num)
        sign = '+' #괄호 안열려있을 때, +는 +그대로 
        num = ''
    elif st[i] == '-' and change:
        if sign == '-':
            answer -= int(num)
        else:
            answer += int(num)
        sign = '-' #다음 차례는 이걸로 확인
        num = ''
    else:
        num += st[i]

# 마지막 숫자 처리
if sign == '-':
    answer -= int(num)
else:
    answer += int(num)
    
print(answer)

풀이

이게 맞네..? 근데 처리 방식을 보면 맞는것 같기도 하고..

본격적으로 코드를 작성하기 전에 어떤 경우에 괄호를 열고 닫아야하는지 확인했다.
'-' 부호가 등장하는 경우, 뒷부분이 모두 '-'로 처리된다는 규칙을 찾았고, 이를 토대로 4개의 if문을 작성했다.

change는 '-'의 등장여부를 나타내고, '+'/'-'인 경우와 함께 change를 사용해서 4개의 if문이 작성되었다.

가장 헷갈렸던 부분은 sign을 처리하는 부분이었다. '+', '-'이 나올 때 answer에 값을 더하거나 빼야하는데 i 순서에서 나온 +,-로 더함과 뺄셈을 나누는 게 아니라 과거 sign을 기준으로 분류해야해서 헷갈렸다. 이 부분만 잘 처리해준다면 바로 해결될 것으로 보인다.

320x100
728x90

'코딩 테스트 > Baekjoon' 카테고리의 다른 글

S3 11659. 구간 합 구하기 4  (0) 2024.11.05
S2 2805. 나무 자르기  (0) 2024.11.04
S3 9461. 파도반 수열  (0) 2024.11.04
S2 1912. 연속합  (0) 2024.11.04
S2 11724. 연결 요소의 개수  (0) 2024.11.03
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.