본문 바로가기

Algorithm/[이코테] 알고리즘 유형별 기출문제

[이코테] 그리디 - 곱하기 혹은 더하기 python

난이도 ●○○ | 풀이 시간 : 30분 | 시간 제한 : 1초 | 메모리 제한 : 128MB | 기출 : Facebook 인터뷰

 

문제

  • 각 자리가 숫자(0~9)로만 이루어진 문자열 S가 주어진다.
  • 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 'x' 혹은 '+' 연산자를 넣어 만들 수 있는 가장 큰 수를 구하여라.
  • 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정한다.

 

입력조건

  • 첫째 줄에 여러 개의 숫자로 구성된 하나의 문자열 S가 주어진다.(1<=S의 길이<=20)

출력조건

  • 첫째 줄에 만들어질 수 있는 가장 큰 수를 출력한다.

 

입력예시

02984

출력예시

576

 

 

아이디어

  • 어떤 수든 0을 곱하면 0이 되고, 1을 곱하면 원래값이 그대로 유지되므로 0이나 1일 때는 더하기를 하는 게 이득이다.

 

코드

s = list(input())
result = int(s[0])

for i in range(1,len(s)):
    num = int(s[i])
    # 맨 처음값을 result에 저장해두는데
	# 이 값이 0이나 1이라면 다음값이 얼마나 크든 더하기 연산을 해줘야 한다는 점을 주의.
    if num<=1 or result<=1:
        result += num
    else:
        result *= num

print(result)