공부 자료/알고리즘
[그리디] 곱하기 혹은 더하기
뚜루뚜루세니
2022. 8. 29. 15:15
728x90
문제
각 자리가 숫자(0부터 9)로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 'x' 혹은 '+' 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하세요. 단, +보다 x를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정합니다.
예를 들어 02984라는 문자열이 주어지면, 만들어질 수 있는 가장 큰수는 ((((0 + 2) 9) 8) * 4) = 576 입니다.
코드
# 곱하기 혹은 더하기
# * + 연산자를 넣어 가장 큰 수를 구하는 프로그램 작성
# 왼쪽 부터 순서대로
s = input()
#첫번째 문자를 숫자로 변경
result = int(s[0])
for i in range(1, len(s)):
# 두 수 중 하나라도 1이하인 경우
num = int(s[i])
if num <= 1 or result <=1:
result += num
else:
result *= num
print(result)
무조건 곱하는게 더하는 경우보다 크지만 현재 가지고 있는 값이 1 이하이거나, 앞으로의 값이 1이하인 경우에는 + 삽입
접근
💡 0과 1의 경우 더하는 것이 곱하는 것보다 큰 값을 얻을 수 있다.
따라서 첫번째 문자를 숫자로 바꾼 후에, 현재 숫자가 1이하이거나, 연산 결과를 가진 result 값이 1이하인 경우에만 더하기를 해주고, 그 외에는 result와 num의 곱이 결과값이 될 수 있도록 해준다.
728x90