반응형
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 파이썬 - 나동빈 지음(한빛미디어)
반응형
'알고리즘 > 이취코테' 카테고리의 다른 글
[이취코테] 만들 수 없는 금액 (0) | 2022.01.04 |
---|---|
[이취코테] 숫자 카드 게임 (0) | 2022.01.04 |
[이취코테] 큰 수의 법칙 (0) | 2022.01.03 |
[이취코테] 모험가 길드 (0) | 2021.12.31 |
[이취코테] 1이 될 때까지 (0) | 2021.12.31 |