백준 [1541] - 잃어버린 괄호
문제
아이디어
ex) 식이 55 + 50 - 40 + 55 -30 일 때,
[공통 아이디어]
: (55 + 50) - (40 + 55) - 30 으로 생각하면 된다. → '-' 기준으로 나눈다 가 먼저!
[내가 생각한 방법]
1)-를 기준으로 나눠서 +연산들을 다 하고
2)+연산한 값들을 다시 다 빼주면 → 최소값이 나온다!
→ 55+50, 40+55, 30 으로 나눠서, +있는 것들 먼저 계산
→ 105, 95, 30 을 다 빼주기
→ 105 - 95 - 30 = 10 - 30 = -20
[최적의 방법]
1) -를 기준으로 나누되, 처음 나눠진 것만 +연산들을 해주고,
2) 나머지 뒤에 있는 것들은 어짜피 빼줄 값들이기 때문에, 다 -로 계산해주면 → 최소값이 나온다!
→ 55+50, 40+55, 30 으로 나눠서, 제일 첫 번째 것만 먼저 + 계산
→ 105, 40+55, 30 첫 번째 뒤에 있는 것들은 다 빼주기 (+가 있다면, +기준으로 나눠서 각각 빼주기)
→ 105 - 40 - 55 - 30 = -20
작성한 코드
sub_nums = input().split('-')
minus_nums = list()
for i in sub_nums:
plus_value = 0
for j in i.split('+'):
plus_value += int(j)
minus_nums.append(plus_value)
result = minus_nums[0]
for k in minus_nums[1:]:
result -= k
print(result)
- '-'을 기준으로 입력한 값을 나눠서 리스트로 만들어진 것을 sub_nums에 저장한다.
- 뺄 값들만 저장할 리스트인 minus_nums를 선언한다.
- sub_nums 안에 있는 값들을 i에 담아 하나씩 꺼내서 비교한다.
- i를 '+' 기준으로 나눠서 리스트로 만들어 for문을 돌려 하나씩 꺼내 j에 저장하여 비교하는데, j의 값을 int형으로 형변환 하여 plus_value에 더한다.
- minus_nums에 덧셈을 마친 plus_value의 값을 append()로 추가한다.
- 뺄 값들만 저장한 리스트인 minus_nums의 0번째 원소를 result 변수에 저장한다.
- minus_nums 1번째 원소부터 끝까지 for문을 돌리면서 '-'연산을 진행한다.
- 최종적으로 뺄셈을 마친 result의 값을 print()로 출력한다.
cf.) 더 나은 코드
sub_nums = input().split('-')
sum = 0
for i in sub_nums[0].split('+'):
sum += int(i)
for j in sub_nums[1:]:
for k in j.split('+'):
sum -= int(k)
print(sum)
- 위의 아이디어를 바탕으로 작성된 코드이다.
- 제일 먼저 '-'를 기준으로 나눠주는 아이디어는 똑같았다.
- 최초로 '-' 연산자가 나오기 전까지의 식 == 0번째 이기 때문에, 0번째의 식을 먼저 '+'계산해준다.
- 그 다음 1번째 부터 끝까지 for문을 돌려 -계산을 해주되, 만약 '+'가 포함된 식이라면, +를 기준으로 나눠준 뒤 '-'계산을 해준다.
(1번째 부터 끝까지의 숫자들은 다 '-' 해주면 된다.)
'코딩테스트 > 백준' 카테고리의 다른 글
백준[2798] - 블랙잭 (0) | 2023.02.11 |
---|---|
백준 [13305] - 주유소 (0) | 2023.02.10 |
백준 [11399] - ATM (0) | 2023.02.07 |
백준 [1931] - 회의실 배정 (0) | 2023.02.02 |
백준 [11047] - 동전 0 (0) | 2023.02.02 |
댓글