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)
전형적인 그리디 알고리즘 문제였고 직관적으로 솔루션이 보이는 문제였다. 이런 문제를 틀렸다는게 많이 아쉽다ㅜㅜ
반응형
'알고리즘' 카테고리의 다른 글
[이것이 코딩테스트다] 실전 - 만들 수 없는 금액* (0) | 2021.12.11 |
---|---|
[이것이 코딩테스트다] 실전 - 문자열 뒤집기 (0) | 2021.12.11 |
[이것이 코딩테스다] 실전-모험가 길드* (0) | 2021.12.11 |
[이것이 코딩테스트다] 이진 탐색 (0) | 2021.12.08 |
[이것이 코딩테스트다] 정렬 - 문제 (0) | 2021.12.05 |