출처 : 이것이 취업을 위한 코딩테스트다 with python
유형 : 그리디
1. 문제
각 자리가 숫자(0부터 9)로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하여 숫자 사이에 '*' 혹은 '+' 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.
단, 일반적인 계산방식과 달리 모든 연산은 왼쪽에서부터 순서대로 이뤄진다고 가정.
예시
02894
예시 출력
576
2. 내 코드
## 곱하기 혹은 더하기
# 내 코드
str = input()
str = list(str)
opr = []
for i in range(len(str)-1):
if (str[i] == '0' or str[i+1] == '0'):
opr.append('+')
else:
opr.append('*')
n1 = int(str[0])
n2 = int(str[1])
if opr[0] == '*':
_sum = n1 * n2
else:
_sum = n1 + n2
for i in range(2,len(str)):
n1 = int(str[i])
if opr[i-1] == '*':
_sum = _sum * n1
else:
_sum = _sum + n1
print(_sum)
연산자를 수에 맞게끔 둬야 한다고 생각해서 따로 연산자 리스트를 만들었다. 그래서 따로 만든 연산자 리스트를 원래 숫자 리스트랑 순서대로 계산을 해주었다. 근데 비효율적인 것 같다. 굳이 연산자 리스트를 안 만들어도 되는...
3. 풀이
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)
이 풀이의 핵심은 두수에 대해 연산을 수행할 때, 두 수 중에서 하나라도 1 이하인 경우에는 더하며, 두 수가 모두 2 이상인 경우에는 곱한다는 것이다.
반응형
'Python' 카테고리의 다른 글
[백준] 18352번 : 특정 거리의 도시 찾기 (0) | 2022.02.09 |
---|---|
[백준] 1439번 : 뒤집기 (0) | 2022.02.09 |
[이취코] 모험가 길드 (0) | 2022.02.09 |
[백준] 1931번 : 회의실 배정 (0) | 2022.02.09 |
[이취코] 1이 될 때까지 (0) | 2022.02.08 |
댓글