본문 바로가기

알고리즘

[이것이 코딩테스트다 - 그리디] 곱하기 혹은 더하기

이 문제를 그리디로 접근해야 하는 이유:

 

곱하는 경우가 큰 게 명확함

-> 따라서 정렬하고, 곱하기 하는 케이스를 늘려야 함.

 

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에 첫번째 데이터 값을 쓺으로써 리스트 선언의 필요성을 아예 뺴버렸다.

 

공간 복잡도를 줄이는 디테일을 확인할 수 있었다.

그리고, 두 변수만 활용하여 코드를 이해하기 쉽게 짠 것도 배울 만한 점이다.

 

다음 코드는 그렇게 짤 수 있게 노력해봐야겠다.

반응형