알고리즘/이취코테

[이취코테] 곱하기 혹은 더하기

서노리 2021. 12. 31. 14:47
반응형

https://www.youtube.com/watch?v=2zjoKjt97vQ

이 문제의 해설 영상이다.

문제

각 자리가 숫자로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 'x' 혹은 '+' 연산자를 넣어 만들 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.
(단, + 보다 x를 먼저 계산하는 일반적인 방식과 달리, 모든 연산은 왼쪽부터 차례대로 이루어진다고 가정)

 

입력 조건: 첫째 줄에 여러 개의 숫자로 구성된 하나의 문자열 S가 주어진다.(1 <= |S| <= 20)

 

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

 

나의 코드

s = input()
result = int(s[0])
for i in range(1, len(s)):
    if(result > 1 and int(s[i]) > 1): result *= int(s[i])
    else: result += int(s[i])

print(result)

일반적으로는 두 수에 대해 연산을 할 때, 대부분 곱하기가 더하기보다 값을 더 크게 만든다. 하지만 두 수 중에서 하나라도 0이나 1이라면 곱하기 보다 더하기가 값을 더 크게 만든다. 따라서 풀이 방법은 두 수에 대해 연산을 할 때, 두 수 모두 1보다 크다면 곱하고 둘 중 하나라도 1보다 작다면 더하기를 수행하는 것이다. 이 방식대로 하면 예외가 없기 때문에 항상 최적의 해를 보장한다.

 

정답 코드

data = input()
result = int(data[0])

for i in range(1, len(data)):
	num = int(data[i])
    if num <= 1 or result <= 1:
    	result += num
    else:
    	result *= num

print(result)

나의 코드와 비교했을 때 풀이 방법과 효율이 일치한다.

 


참고자료: 이것이 취업을 위한 코딩 테스트다 with 파이썬 - 나동빈 지음(한빛미디어)

반응형