https://www.acmicpc.net/problem/1541
🗒️파이썬 코드 풀이
import sys
input = sys.stdin.readline
S = input().split('-')
lst = []
for i in range(len(S)):
lst.append(sum(list(map(int,S[i].split("+")))))
rs = lst[0]
for ls in lst[1:]:
rs -= ls
print(rs)
1. 보통 입력은 split()으로 하는데, 이 문제의 경우 '-' 로 나눠준다.
(한 번 빼기가 시작되면 그 이후 모든 숫자가 한꺼번에 빼주는 것이 최소 값을 만드는 최선의 선택)
2. 한번 '-' 로 나눠준 lst를 이번에는 '+' 로 나눠주고,
int 형으로 바꾸면서 sum을 해주고 lst에 붙여준다 .
( 로직이 길어서 어려워 보인데, 그냥 하나 하나 하면 간단하다 ...)
3. rs의 초기값은 lst[0]으로 만들어주고 순차적으로 뺴주면 된다.
🔗 내 풀이 코드
import sys
lst = list(input())
operations = ['+',"-"]
num = []
current = 0
tmp = ""
while True :
if lst[current] in operations:
num.append(int(tmp))
num.append(lst[current])
tmp = ""
current += 1
continue
tmp += lst[current]
current += 1
if current == len(lst):
num.append(int(tmp))
break
rs = []
hap = 0
for i in range(len(num)) :
if num[i] == "-":
rs.append(hap)
rs.append(num[i])
hap = 0
elif num[i] == "+":
continue
else:
hap += num[i]
if i == len(num)-1:
rs.append(hap)
rrs = rs[0]
if len(rs)== 1 :
print(rs[0])
else:
for i in range(1,len(rs)-1) :
if rs[i] == "-" :
rrs -= rs[i+1]
print(rrs)
흠 ... "+", "-" 를 나눠주고, 반복문하고 ....
뭐 정답은 통과한 문제이지만 ....
너무 지저분하고 복잡한 코드이다.
📌 문제 코멘트
막 어렵거나 한 문제는 아니다.
간단하게 구현을 통해 가능한데, 새벽에 풀어서 그런지 새벽 감성 넘치게 쓴 코드이다...
한가지 좀 기억 할 것은
split()은 단지 입력을 분할을 위한 함수가 아니고,
다른 리스트 분할 해주는데도 쓰인다.
이 부분을 생각하지 못해서 while 문까지 쓰면서 지저분하게 작성한 코드이다.
📚문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
예제 입력 1 복사
55-50+40
예제 출력 1 복사
-35
예제 입력 2 복사
10+20+30+40
예제 출력 2 복사
100
예제 입력 3 복사
00009-00009
예제 출력 3 복사
0
출처
'알고리즘 > 알고리즘_백준' 카테고리의 다른 글
[Python][백준] 12865. 평범한 배낭 / DP, 배낭 문제 (G5) (1) | 2024.10.04 |
---|---|
[Python][백준] 9084. 동전 / DP, 배낭 문제 (G5) (0) | 2024.10.02 |
[Python][백준] 7569. 토마토 / 우선순위 큐, 다익스트라(G4) (0) | 2024.09.28 |
[Python][백준] 14888. 연산자 끼워넣기 / 브루트포스, 백트레킹 (S1) (0) | 2024.09.27 |
[Python][백준] 18352. 특정 거리의 도시 찾기 / BFS,최단경로 (S2) (0) | 2024.09.27 |