문제

이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저)

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

예를 들어 02984라는 문자열이 주어지면,
만들어질 수 있는 가장 큰 수는 ((((0+2) 9) 8) * 4) = 576 입니다.

입력 예시1:
02984

출력 예시1:
576

입력 예시2:
567

출력 예시2:
210

풀이

사칙연산을 할 줄 안다면, 지문을 읽으면서 간단하게 풀이를 떠올릴 수 있다.
0 과 1 을 만난다면 더하는 것이 상책이다.
2 부터는 곱하는 것이 무조건 더 커진다.
문제 조건이 무조건 왼쪽부터 풀이한다고 했으니,
그리디 알고리즘으로 분류된다.

num_str = input()
answer = int(num_str[0])

for i in range(1, len(num_str)):
    if int(num_str[i]) < 2 or answer < 2 :
        answer += int(num_str[i])
    else :
        answer *= int(num_str[i])

print(answer)

댓글남기기