[알고리즘] 곱하기 or 더하기

마데슾 : My Dev Space·2021년 6월 16일
0

알고리즘

목록 보기
6/9

문제

다음과 같이 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
profile
👩🏻‍💻 🚀

0개의 댓글