링크 : https://www.acmicpc.net/problem/1541
- 문제
- 소요시간 : 1시간 30분



- 설계하기(접근방법)
1. 식을 입력받는다(Str으로)
2. 식 내에서 for문을 통해 순회한다.
'-'가 나타난경우, 뒤에
조건1
다른'-'가 나타날때가지
조건2
식이 끝날때까지
순회하다 조건을 만족하면 괄호를 닫아준다.
괄호 추가하는 방법
1. '-'가 나타난 경우 '-'의 index 넘버 + 1에 '('를 insert해준다
2. 또다른 '-' 가 나타나거나 식이 끝날 때 ')'를 insert해준다
고려사항 :
3.eval() 메서드를 통해 수식 계산 결과를 계산해준다
- 코드(출력)
def deletezero(array):
while (array[0] == '0'):
del array[0]
index = 0
for i in array:
if i in ['+', '-', '(']:
while (array[index + 1] == '0'):
del array[index + 1]
index += 1
return array
soosik = list(input())
indexnum = 0
for i in soosik:
if i == '-':
soosik.insert(indexnum + 1, '(')
j = indexnum
while (True):
j += 1
if (soosik[j] == '-'):
soosik.insert(j, ')')
break
if (j == len(soosik) - 1):
soosik.insert(j + 1, ')')
indexnum += 1
break
indexnum += 1
soosik = deletezero(soosik)
result = ''.join(soosik)
print(eval(result))
맞추긴 했지만 이와 같은 쓰레기 코드를 작성하고 디버깅하느라 1시간 반이 걸렸다.
다른 사람의 코드를 보니 15줄 내외로 끝날 수 있는 문제였다.
문제를 푸는 아이디어 자체는 맞았으나 구현이 아주 바보같았다.
이유 1. split 함수의 기능을 사용하여 '-'을 기준으로 구분한다면
괄호를 묶은것과 같은 기능을 할 수 있다.
이유 2. 0으로 시작하는 수는 int()함수를 이용해서 0을 제거할 수 있다는 것을 처음 알았다
새로운 코드
soosik = list(input().split('-'))
sum = 0
for i in soosik[0].split('+'): # 첫번째 '-'가 나오기 전까지의 합
sum += int(i)
for i in soosik[1:]:
for j in i.split('+'):
sum -= int(j)
print(sum)
1. '-'를 기준으로 나눈다 ex [50 + 60, 70 + 80, 30 + 20]
2. 첫번째 '-' 전까지의 합을 구한다
3. 나머지 숫자들을 전부 빼주면 된다.
- 얻어갈 부분
1. 논리구조가 너무 복잡해진다는 생각이 들면 멈추고, 다른 방법을 생각해보자
2. split 함수의 기능을 적극 이용하자
3. 0으로 시작하는 숫자의 경우 int()함수를 이용해 0을 제거할 수 있다
'알고리즘(백준) > 그리디' 카테고리의 다른 글
| [알고리즘/그리디] 10610 번 : 30 - python (0) | 2023.02.21 |
|---|---|
| [알고리즘/그리디] 13305번 : 주유소 - python (0) | 2023.02.21 |
| [알고리즘/그리디] 10162번 : 전자레인지 - python (0) | 2023.02.21 |
| [알고리즘/그리디] 1789 번 : 수들의 합 - python (0) | 2023.02.20 |
| [알고리즘/그리디] 5585 번 : 거스름돈 - python (0) | 2023.02.20 |