알고리즘

[백준 1541번 파이썬]잃어버린 괄호 (문자열)

로드존슨 2023. 3. 5. 02:58
728x90

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

접근 오류 

처음풀이를 시작할 때 접근을 잘 못하였다. 문제 이름처럼 잃어버린 괄호이다 보니 괄호를 적절히 배치를 함으로써 얻어지는 결과를 반환하는 로직을 구현을 하려고 하였더니 머리가 넘아파서 반포기 상태였다. 

다시 문제 접근을 달리 하여 풀기 시작하였다.

괄호를 떠나서 입력값에 최소값 출력에 초점을 맞춰 더하기 연산자끼리 먼저 더하고, 그 값에 마이너스를 넣는 식으로 접근

 

플러스연산자끼리 먼저 다 더한 다음 다 빼준다.

1) 마이너스 기준으로 나눈다.

2) 플러스 있는 것끼리 다 더하고 

3) 다 뺀다

 

 

expression = input()

# '-'를 기준으로 분할하여 각 부분식에서 '+'를 기준으로 숫자를 추출하여 리스트에 저장
num_list = []
for s in expression.split('-'):
    nums = s.split('+')
    num_sum = 0
    for num in nums:
        num_sum += int(num)
    num_list.append(num_sum)

result = num_list[0]  # 초기값 설정
for num in num_list[1:]:
    result -= num

print(result)
expression = input()

# '-'를 기준으로 분할하여 각 부분식에서 '+'를 기준으로 숫자를 추출하여 리스트에 저장
num_list = [sum(map(int, s.split('+'))) for s in expression.split('-')]

result = num_list[0]  # 초기값 설정
for num in num_list[1:]:
    result -= num

print(result)

1)마이너스 기준으로 입력값을 나눈다

expression= input().split('-')   # ['55','50+40']

2)플러스 끼리 더한다

num_list=[]    # '-'를 기준으로 분할하여 각 부분식에서 '+'를 기준으로 숫자를 추출하여 리스트에 저장

for s in expression:       # expression : ['55','50+40']
 nums=s.split('+')         # nums ['55',['50','40']]
 nums_sums=0
 for num in nums:
 	nums_sums+=int(num)    # num는 문자열이니까 int(num) , 그리고 50+40 해준다.
 num_list.append(nums_sums)    #num_list =['55','90']

3) 더한 값에 뺀다.

result=plus_list[0]      #초기값 설정 

for num in num_list[1:]:  # num_list[1:] 초기값 설정으로 [1:] 시작 
    result -= num

print(result)

총평

문제를 단순하게 생각하자

예제입력값을 요리조리 생각하면서 문제해결의 실마리를 찾자

 

 

728x90