문제
유니는 교무실에 심부름 갔다가 수학 선생님의 책상 위 하필이면 자신의 수행평가 학습지와 선생님의 채점 글씨를 발견했다.
채점 글씨에는 N개의 수가 나열되어 있었고 수 사이마다 연산자가 있었는데 이것이 기억이 안나 자신의 점수를 모른다. 유니는 행복회로를 돌리기로 했다. 수 사이에 +와 *를 넣어서 만들 수 있는 가장 큰 결과값을 자신의 점수로 생각하기로 했다면 그 점수는 몇 점인지 구하는 프로그램을 작성하시오.
유니는 수학을 못해 연산자의 우선순위는 고려하지 않고 앞에서부터 계산한다.
입력
첫째 줄에 테스트케이스의 수 T가 주어진다..
각 테스트케이스의 첫 줄에 N이 주어진다.
각 테스트케이스의 둘째 줄에 유니가 본 수들이 공백으로 구분되어 주어진다. 모든 수는 0 이상 9 이하의 정수다.
( 1 ≤ T ≤ 10, 1 ≤ N ≤ 9 )
출력
각 테스트케이스마다 '#'과 테스트케이스의 번호, 공백을 출력한 뒤 유니가 추측한 점수를 출력한다.
문제 풀이
유니가 본 수들 사이에 + 혹은 * 기호를 넣어 계산했을 때 가장 큰 결과 값을 찾는 문제이다.
+ 보다는 * 기호를 사용해야 수를 훨씬 크게 만들 수 있다.
하지만, 0과 1의 경우에는 +를 사용해야 수를 크게 만들 수 있다.
따라서 두 가지 경우로 나누어 이때는 +를 사용해주어야 한다.
1. 지금까지 더한 결과가 0 또는 1일 경우
2. 앞으로 더할 수가 0 또는 1일 경우
이 두 경우를 제외하고는 모두 *를 사용해주면 된다.
My Code
for tc in range(int(input())):
n = int(input()) # 수의 개수
array = list(map(int,input().split())) # 유니가 본 수
result = array[0] # 첫번째 수를 초기값으로 설정
for i in range(1, n):
if result <= 1 or array[i] <= 1: # 지금까지 더한 결과 혹은 앞으로 더할 수가 1이하라면
result += array[i] # 더하기 연산
else: # 그 외에는
result *= array[i] # 곱하기 연산
print('#' + str(tc + 1), end = ' ')
print(result)
'알고리즘' 카테고리의 다른 글
[알고리즘 문제] 공기 청정기 (Python / 파이썬) (0) | 2022.05.21 |
---|---|
[알고리즘 문제] 회전탑 (Python / 파이썬) (0) | 2022.05.21 |
[알고리즘 문제] 카드 더하기 (Python / 파이썬) (0) | 2022.05.21 |
[알고리즘 문제] 알파벳 사이 숫자 (Python / 파이썬) (0) | 2022.05.21 |
[알고리즘 문제] 이사 (Python / 파이썬) (0) | 2022.05.19 |
댓글