[이코테] 그리디-곱하기 혹은 더하기 with 파이썬

JIN KANG·2022년 10월 5일

이코테

목록 보기
2/29
post-thumbnail

1. 문제

  • 0~9로 이루어진 문자열이 들어온다.
  • 왼쪽부터 오른쪽으로 하나씩 확인하며 '곱하기' 혹은 '더하기' 연산으로 가장 큰 수를 만들라.
  • 단, 연산은 왼쪽부터 순서대로 진행한다.

입력조건

  • 숫자로 구성된 하나의 문자열 (1<= S <= 20)

출력 조건

  • 만들어질 수 있는 가장 큰 수 출력

입력 예시

02984

출력 예시

576

2. 아이디어

  • 첫번째 수는 입력해놓고
  • 두번째 수부터 더하는 결과와 곱하는 결과 둘중 가장 큰 수로 업데이트 되게 한다.

3-1. 예제코드1 (직접푼것)

# 입력
numbers = list(map(int, input()))   

# 결과객체 초기화
result = numbers[0]    # 첫 숫자 입력

# 메인
for i in range(0, len(numbers)-1):    # i+1을 사용할 것이므로, 마지막 앞까지만 탐색한다.     
    result = max(result+numbers[i+1], result*numbers[i+1])   
    # 다음수를 더한값과 곱한값 중 더 큰 값으로 결과를 갱신한다. 
    
print(result)

3-2. 예제코드2 (저자 version)

💡 저자는 두 수중 하나가 0 또는 1 이면, 더하기 그렇지 않은 경우는 곱하기 연산을 수행하게 했다.

# 입력 
nums = list(map(int, input()))

# 결과 초기화
result = nums[0]

# 메인
for i in range(1, len(nums)):   # 두번째 수부터 끝까지 탐색
    if nums[i] <= 1 or result<=1:            # 0, 1이면 더한값을 갱신한다.
        result += nums[i]
    else :                      # 그렇지 않으면 곱한값을 갱신한다.
        result *= nums[i]
        
print(result)

4. 배운점

  • 0을 곱하면 안되겠다 까지는 생각했지만, 1을 더하는 것이 더 낫다는 생각하지 못했다.

참고

  • 이것이 취업을 위한 코딩테스트다. with 파이썬
profile
성장하는 데이터 분석가

0개의 댓글