문제
각 자리가 숫자 0 ~ 9로만 이루어진 문자열 S가 있을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 * 혹은 + 연산자를 넣어 결과적으로 가질 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.
단, 일반적인 우선순위와 다르게 모든 연산은 왼쪽부터 순서대로 이루어진다고 한다.
또한 만들어 질 수 있는 가장 큰 수는 항상 20억 이하의 정수가 되도록 입력이 주어진다.
입력 조건
- 첫째 줄에 여러 개의 숫자로 구성된 하나의 문자열 S가 주어진다. (1<=S의 길이<= 20)
출력 조건
- 첫째 줄에 만들어질 수 있는 가장 큰 수를 출력한다.
입력 예시
더보기
02984
출력 예시
더보기
576
✔ Solution
s = input()
result = 0 # 값을 넣어줄 변수
for i in range(len(s)):
num = int(s[i])
# 들어온 값이나 결과값이 1이하일 경우 더하기 시행
if num <= 1 or result <= 1 :
result += num
# 위의 경우가 아닌경우 곱셈 시행
else :
result *= num
print(result)
⭐ 문제 포인트
- 들어온 값(s[i])과 결과값(result)이 1이하인 경우 덧셈을 해준다.
- 2이상의 수에 대해서는 곱하는게 더 큰 수를 만들 수 있다.
✔ Solution 2
s = input()
result = int(s[0]) # 첫번째 문자를 수로 저장
for i in range(1, len(s)):
num = int(s[i])
# 첫번째 값이나 두번째 값이 1보다 작은경우 더하기 시행
if num <= 1 or result <= 1 :
result += num
# 위의 경우가 아닌경우 곱셈 시행
else :
result *= num
print(result)
'알고리즘 > 기타 알고리즘' 카테고리의 다른 글
[Python] permutation, combination 순열과 조합 (0) | 2022.01.24 |
---|---|
[그리디 Greedy] 볼링공 고르기 (0) | 2022.01.24 |
[그리디 Greedy] 문자열 뒤집기 (0) | 2022.01.24 |
[그리디 Greedy] 모험가 길드 (0) | 2022.01.24 |
최단 경로 (Shortest Path Problem) - 플로이드 워셜 알고리즘 (0) | 2022.01.24 |