본문 바로가기
알고리즘

[알고리즘 문제] 행복 회로 (Python / 파이썬)

by yewonnie 2022. 5. 21.

문제

유니는 교무실에 심부름 갔다가 수학 선생님의 책상 위 하필이면 자신의 수행평가 학습지와 선생님의 채점 글씨를 발견했다.
채점 글씨에는 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)

댓글