각 자리가 숫자로만 이루어진 문자열 S가 주어졌을 때, 모든 숫자 사이에 x 혹은 +를 넣어 결과적으로 만들 수 있는 가장 큰수를 구해서 리턴하시오. 단, +보다 x를 먼저 계산하는 일반적인 방식과는 달리 모든 연산을 왼쪽에서부터 순서대로 한다고 가정한다.
S의 길이는 1이상 20 이하
만들어질 수 있는 큰 수는 항상 20억 이하
음.. 0이나 1이면 더하고 나머지 수는 곱하면 그리디하게 풀 수 있지 않을까?
+랑 x를 끼워넣는 모든 경우를 전체탐색하는 발상도 해볼수는 있는데 S길이가 20일 경우 2^20의 경우의 수가 발생한다.
두 수를 곱하는 경우랑 더하는 경우를 비교해서 연산을 수행해도 된다
nums = list(map(int,input()))
summary = nums[0]
for i in range(1, len(nums)):
if summary*nums[i] > summary+nums[i]:
summary *= nums[i]
else:
summary += nums[i]
print(summary)
혹은
nums = list(map(int,input()))
summary = nums[0]
for i in range(1, len(nums)):
if summary<=1 or nums[i]<=1:
summary += nums[i]
else:
summary *= nums[i]
print(summary)
'코딩 테스트 및 알고리즘 > 이것이 취업을 위한 코딩테스트다' 카테고리의 다른 글
Q4. 만들 수 없는 금액 (0) | 2022.04.05 |
---|---|
Q03 문자열 뒤집기 (0) | 2022.04.05 |
Q1. 모험가 길드 (0) | 2022.04.03 |
Q13. 치킨 배달 (0) | 2022.04.03 |
Q11. 뱀 (0) | 2022.04.02 |