본문 바로가기
Algorithm/Programmers

[그리디] 곱하기 혹은 더하기 (파이썬)

by 그랴 2022. 7. 16.

각 자리가 숫자로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 'X' 또는 '+' 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하세요.

단, 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정한다.


s = input()
#배열에 넣기
s = list(s)
arr = list(map(int,s))

result = arr[0]

i = 1
while i < len(arr):
  if result == 0 or arr[i] == 0:
    result += arr[i]
    i += 1
  elif result != 0 and arr[i] != 0:
    result *= arr[i]
    i += 1
  elif arr[i] == 1:
    result += arr[i]
    i += 1

print(result)

연산자 양 옆의 수가 0이 아닐 때는 무조건 곱해야 가장 큰 수가 될 것이라고 생각했는데,

친구들과 코드 리뷰를 하다보니 '새로운 숫자가 1일 때는 곱하는 것보다 더하는 것이 낫다'라는 것을 알게 되어

해당 조건도 추가했다.