250x250
Notice
Recent Posts
Recent Comments
Link
멋쟁이v의 개발일지
[백준 1541번] 잃어버린 괄호(파이썬) 본문
728x90
320x100
문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
예제 입력 1
55-50+40
예제 출력 1
-35
풀이
이 문제는 괄호를 적절히 쳐서 제시된 식의 값을 최소로 만들어야 합니다.
예제를 보면
55-50+40
55-(50+40) => 최솟값
'-'를 기준으로 문자를 끊고 끊어진 수들을 더해 빼주면 되는 문제입니다.
주의해야 할 점은 첫번째 문자가 음수와 양수일때 와 0으로 시작되는 숫자 입니다.
코드를 순서대로 작성한다면
1. '-' 기준으로 나눈 문자의 첫번째 문자를 정수형태(0으로 시작되는 숫자고려)로 저장하고 '+' 기준으로 더하기
2. 만약 첫번째 문자가 '-'이면 빼주고 '+'이면 더해준 값을 정답 변수에 저장
3. 첫번째 이후 문자를 '+' 기준으로 다 더해주고 정답 변수와 빼기
4. 이 과정을 두번째 문자부터( S[1:] ) 반복
작성 코드
S = input().split('-') # 입력된 문자를 '-'기준으로 끊음 answer = 0 X = sum(map(int, (S[0].split('+')))) # S의 첫번째 문자를 정수형태로 하여 '+'기준으로 더하고 저장 if S[0] == '-': # 만약 첫번째 문자가 '-'로 시작하면 빼기 answer -= X else: answer += X # '+'로 시작하면 더하기 for i in S[1:]: # '-'기준으로 나눈 S를 두번째 인덱스부터 반복 X = sum(map(int, (i.split('+')))) # 정수형태로 하여 '+'기준으로 더하고 저장 answer -= X # 더한 값을 정답 변수에 빼주기 print(answer)
728x90
320x100
'0년차 > 알고리즘(그리디)' 카테고리의 다른 글
[백준 2217번] 로프(파이썬) (0) | 2022.11.16 |
---|---|
[백준 5585번] 거스름돈(파이썬) (0) | 2022.11.15 |
[백준 1026번] 보물(파이썬) (0) | 2022.11.15 |
[백준 1931번] 회의실 배정(파이썬) (0) | 2022.11.14 |
[백준 11047번] 동전 0 (파이썬) (0) | 2022.11.14 |
Comments