다음과 같이 0 혹은 양의 정수로만 이루어진 배열이 있을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 '✕' 혹은 '+' 연산자를 넣어 결과적으로 가장 큰 수를 구하는 프로그램을 작성하시오.
단, '+' 보다 '✕' 를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서 순서대로 이루어진다.
[0, 3, 5, 6, 1, 2, 4]
0, 1을 제외한 나머지는 곱하는게 항상 큰 수가 나온다
0 + 3 === 3 / 0 * 3 === 0
1 + 3 === 4 / 1 * 3 === 3
2 + 3 === 5 / 2 * 3 === 6
.
.
.
위의 특징을 사용하여 아래의 과정대로 코드를 구현해보겠습니다
1. 결과값을 0으로 설정합니다
2. 주어진 배열을 순회 한다
3. 현재 탐색중인 요소 혹은 결과값이
- 1보다 작거나 같다면 결과값에 더해주고
- 1보다 크다면 결과값에 곱해줍니다
function findMaxPlusOrMultiply(array) {
const result = array.reduce((accumulator, currentValue) => {
const nextAccumulator =
accumulator <= 1 || currentValue <= 1
? (accumulator += currentValue)
: (accumulator *= currentValue);
return nextAccumulator;
}, 0);
return result;
}
def find_max_plus_or_multiply(array):
multiply_sum = 0
for number in array:
if number <= 1 or multiply_sum <= 1:
multiply_sum += number
else:
multiply_sum *= number
return multiply_sum