백준 알고리즘 1541번 | 잃어버린 괄호
https://www.acmicpc.net/problem/1541
문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
예제 입력 1
55-50+40
예제 출력 1
-35
예제 입력 2
10+20+30+40
예제 출력 2
100
예제 입력 3
00009-00009
예제 출력 3
0
예제 입력 3
-40+20-30
예제 출력 3
-90
해설
이 문제는 괄호를 적당히 쳐서 식의 답을 최소로 만드는 것입니다.
예제들은
55-50+40
55-(50+40) = -35
10+20+30+40
10+20+30+40 = 100
00009-00009
00009-(00009) = 0
-40+20-30
-(40+20)-30
이런식으로 계산됩니다.
이 문제는 -와 - 사이의 수를 전부 괄호를 치면 되는 문제입니다.
그럼 split() 함수를 사용하여 - 사이를 전부 끊어봅시다.
변수(리스트or 문자열).split('끊을 기준이 될 문자')
여기서는 list.split('-')이 되겠네요.
m = '55-50+40'
print(m.split('-'))
출력 : ['55','50+40']
m = '10+20+30+40'
print(m.split('-'))
출력 : ['10+20+30+40']
m = '00009-00009'
print(m.split('-'))
출력 : ['00009','00009']
m = '-40+20-30'
print(m.split('-'))
출력 : ['40+20','30']
여기서 두가지 문제에 해결 방법을 생각해야합니다.
먼저, 문자열의 처음이 '-'으로 시작하는 경우(-40+20-30) :
if m[0] == '-'일 경우 True를 Return하는 방법을 사용하면 됩니다
m = '-40+20-30'
if m[0] == '-':
print('마이너스로 시작합니다.')
출력 : 마이너스로 시작합니다
두번째는, 앞에 0이 들어가는 경우(ex : 00009) :
int() 함수를 사용하여 정수화하면 해결됩니다.
print(int(00009))
출력 : 9
다음은 코드입니다.
n = str(input())
m = n.split('-')
answer = 0
# 첫번째는 -로 시작할 경우의 수가 있어서 따로 작업
x = sum(map(int, (m[0].split('+'))))
if n[0] == '-':
answer -= x
else:
answer += x
for x in m[1:]: # 첫번째 작업은 이미 했기때문에 인덱스 1부터 시작
x = sum(map(int, (x.split('+'))))
answer -= x
print(answer)
여기서 x = sum(map(int, (m[0].split('+'))))를 보고 이해를 못하시는 분이 많으실꺼같아서 주석을 따로 적어두겠습니다.
위 코드를 풀면 다음과 같은 단계를 거칩니다.
- x = m.split('+') # '+'를 기준으로 끊기
- x = map(int, x) # 리스트 내의 수를 전부 정수화 하기
- x = sum(x) # 리스트 안의 있는 모든 수의 합을 출력
x에 들어갈 부분에 앞의 코드를 붙여 넣은 것 뿐입니다.
'Python' 카테고리의 다른 글
리눅스 백그라운드 파이썬 실행하는 법 (0) | 2021.11.29 |
---|---|
[백준 2217] 로프 해설 및 풀이 (파이썬) (0) | 2021.11.27 |
[백준 2839] 설탕 배달 해설 및 풀이 (파이썬) (1) | 2021.11.25 |
[파이썬] 음원 분리 모듈 | Spleeter (0) | 2021.11.23 |
[파이썬 오픈소스] 노래 mr 제거 (0) | 2021.11.22 |
글 내용 중 잘못되거나 이해되지 않는 부분은 댓글을 달아주세요! 감사합니다! 문의: puleugo@gmail.com