알고리즘
[이것이 코딩테스트다] 실전 - 곱하기 혹은 더하기*
고구마뿌리
2021. 12. 11. 12:59
728x90
나의코드*
# 나의코드
# 그리디 알고리즘
number = input()
result=int(number[0])
for i in range(1,len(number)):
# 해당 수 또는 이전 수가 0이면 더하기
if int(number[i-1]) in (0,1) or int(number[i]) in (0,1) :
result += int(number[i])
else:
result *= int(number[i])
print(result)
그냥 딱봐도 그리디 알고리즘임을 알 수 있는 문제였다. 곱하기는 더하기보다 당연히 크고 곱하기가 더하기보다 작은 경우는 0과1 밖에 없다.그래서 그런 예외만 처리하면 된다.
하지만 여기서 난 아주 큰 실수를 했다. 해당 수 이전 값이 중요한게 아니라 이전까지 계산된 결과가 0이냐가 중요한 것이다. 예를 들어, [5,0,2]라면 원래대로라면 (5+0)*2가 최대값일 것이다. 하지만 나의 코드대로라면 5+0+2가된다.
문제해석 잘하고 이런 실수를 하다니....
그래도 원래 in을 써본다는 걸 생각해본 적이 없었는데 이걸 떠올렸다는게 뿌듯하다 ㅎㅎ 부등호로 계산하는게 더 효율적이긴 하지만 그래도 직관적으로는 표현했잖아...ㅎㅎ
정답코드
# 정답코드
number = input()
result=int(number[0])
for i in range(1,len(number)):
if result <= 1 or int(number[i]) <= 1 :
result += int(number[i])
else:
result *= int(number[i])
print(result)
전형적인 그리디 알고리즘 문제였고 직관적으로 솔루션이 보이는 문제였다. 이런 문제를 틀렸다는게 많이 아쉽다ㅜㅜ
반응형