곱하기 혹은 더하기

Lee·2023년 3월 13일
0

알고리즘

목록 보기
20/24

문제

각 자리가 숫자(0부터 9)로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 '' 혹은 '+' 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하세요. 단, +보다 를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정합니다.

입력 예시
02984

출력 예시
576

나의 풀이

  1. string을 list화 하게 되면 split 처리가 되는 것을 활용하여
    입력값 02984를 [0, 2, 9, 8, 4]로 나누어지도록 설정했다.
    이후 if문을 사용해 list의 요소를 더한 것과 곱한 것 중 큰 것을 ans에 처리하도록하여 최대값을 계산하도록 구현했다.
S = str(input())

ans = 0
nums = list(S)

for num in nums:
    if ans + int(num) > ans * int(num):
       ans += int(num)
    else:
       ans *= int(num)

print(ans)
  1. 완성 이후 리팩터링 과정에서 위 코드에서 사용한 if문이 결국 max 함수의 기능과 비슷하다는 생각을 하게 되어 조건문을 max함수로 변경하여 코드를 간소화 시켰다.
for num in nums:
    ans = max(ans + int(num), ans * int(num))

코드

S = str(input())

ans = 0
nums = list(S)

for num in nums:
    ans = max(ans + int(num), ans * int(num))

print(ans)
profile
발전하고 싶은 백엔드 개발자

0개의 댓글