이 문제를 그리디로 접근해야 하는 이유:
곱하는 경우가 큰 게 명확함
-> 따라서 정렬하고, 곱하기 하는 케이스를 늘려야 함.
S = input()
sl = [int(i) for i in S]
# print(sl)
sl.sort()
# print(sl)
answer = 0
for i in sl:
if i == 0 or i == 1 or answer == 0 or answer == 1:
answer += i
else:
answer *= i
print(answer)
이건 내 코드. 이렇게 짜면서 answer가 1일 경우를 까먹고 코드를 작성했었다. 1*2와 1+2 중에 뭐가 더 큰지 찾아보는 과정이 필요할 것 같다.
# Detail 중요성
S=input()
# 비교대상: 2개의 값 -> 최종값 result와 현재 리스트에서 순회하는 값
result = int(S[0])
for i in range(1,len(S)):
now = int(S[i])
if result <= 1 or now <=1:
result += now
else:
result *= now
print(result)
책에 써져 있는 코드.
result에 첫번째 데이터 값을 쓺으로써 리스트 선언의 필요성을 아예 뺴버렸다.
공간 복잡도를 줄이는 디테일을 확인할 수 있었다.
그리고, 두 변수만 활용하여 코드를 이해하기 쉽게 짠 것도 배울 만한 점이다.
다음 코드는 그렇게 짤 수 있게 노력해봐야겠다.
반응형
'알고리즘' 카테고리의 다른 글
(이것이 코딩테스트다 - 그리디) 볼링공 고르기 (0) | 2024.04.01 |
---|---|
[이것이 코딩테스트다 - 그리디] 문자열 뒤집기 (0) | 2024.03.28 |
[이것이 코딩테스트다 - 그리디] 모험가 길드 (0) | 2024.03.28 |
[프로그래머스 고득점 Kit] (dfs/bfs) 게임 맵 최단거리 (0) | 2024.03.08 |
[프로그래머스 고득점 kit] (완전 탐색) - 피로도 (0) | 2024.03.07 |