문제
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
문제 요약
주어진 식에 괄호를 적절히 하여 식의 값을 최소로 만들고 정답을 출력한다.
식은 '+', '-', '0'~'9' 만으로 이루어져 있다.
코드
string = input()
arr = []
tmp_num = ''
# arr에 string을 부호와 숫자로 나눠서 넣기
for ob in string:
if ob != '-' and ob != '+':
tmp_num += ob
else:
arr.append(int(tmp_num))
tmp_num = ''
arr.append(ob)
arr.append(int(tmp_num))
#print(arr)
# arr에 +가 없을 때까지
while '+' in arr:
# + 부호를 모두 먼저 계산
for i in range(len(arr)):
if i < len(arr) and arr[i] == '+':
arr.pop(i)
arr.insert(i - 1, arr.pop(i - 1) + arr.pop(i - 1))
#print(arr)
# arr에 -가 없을 때까지
while '-' in arr:
# - 부호를 모두 계산 (음수로 바꾸기)
for i in range(len(arr)):
if i < len(arr) and arr[i] == '-':
arr.pop(i)
arr.insert(i, -arr.pop(i))
#print(arr)
print(sum(arr))
코드 설명
괄호를 이용하여 식의 값을 최소로 만들려면 먼저 +연산을 모두 진행하고 -연산을 진행하면 된다.
1. 입력 받은 문자열을 숫자와 부호로 구분하여 배열에 저장한다.
2. arr에 '+'가 없을 때까지 +부호를 먼저 계산하여 배열에 다시 삽입한다.
3. arr에 '-'가 없을 때까지 -부호를 모두 음수로 변경하여 배열에 다시 삽입한다.
4. arr의 합을 출력한다.
'Algorithm Problems > 그리디' 카테고리의 다른 글
[백준/C++] 1946번: 신입 사원 (1) | 2024.10.22 |
---|---|
[백준/C++] 13975번: 파일 합치기 3 (1) | 2024.08.08 |
[백준/C++] 2138번: 전구와 스위치 (1) | 2024.08.08 |
[백준/Python] 24229번: 모두싸인 출근길 (1) | 2024.01.09 |
[백준/Python] 1931번: 회의실 배정 (2) | 2023.08.31 |