level 0. 곱하기 or 더하기

reggias·2022년 11월 23일
0

문제

Q. 다음과 같이 0 혹은 양의 정수로만 이루어진 배열이 있을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 '✕' 혹은 '+' 연산자를 넣어 결과적으로 가장 큰 수를 구하는 프로그램을 작성하시오.

단, '+' 보다 '✕' 를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서 순서대로 이루어진다.

[0, 3, 5, 6, 1, 2, 4]

[3, 2, 1, 5, 9, 7, 4]

[1, 1, 1, 3, 3, 2, 5]

풀이(오답)

input = [0, 3, 5, 6, 1, 2, 4]
multi = 0


def find_max_plus_or_multiply(array):
    for num in array:
        if num > 1:
            multi = multi + num + '*'
        else:
            multi = multi + num + '+'

    return multi


result = find_max_plus_or_multiply(input)
print(result)

풀이를 위한 사고과정

# 왼쪽부터 오른쪽으로 하나 씩 모든 숫자 확인? for num in array:
# 숫자 사이에 X 혹은 + 연산자를 넣어 가장 큰 수를 구하는 프로그램?
# 숫자들 사이에 연산자를 어떻게 넣지?
# X 할지 + 할지 어떻게 정하지? 다 해보면 되지않나?
# 0과 1이면 + 를 넣고 그외에는 X 를 넣자! if 문 삽입 함수?
# 결과를 담을 변수가 필요해! multi
# 연산을 실행할 변수도 필요한것같은데 ...
# 배열의 길이 - 1 와 배열의 마지막 인덱스가 같으면 종료 리턴이네
# 0 + 3 * 5 * 6 * 1 + 2 * 4 *

다른사람 풀이

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


result = find_max_plus_or_multiply
print(result)
  • 시간복잡도는 O(N)O(N)


배운점

  • multi의 초기값을 0으로 잡았을 때 input에 0이 들어가 있지않은 경우를 생각하지못했고
  • 현재 연산을 진행중인 변수가 1 이하 일 때에 계산값에 큰 영향을 준다는 사실을 생각하지 못했음.
  • 또 숫자들 사이에 연산자를 문자의 형태로 넣어야 한다는 생각을 했었는데 이렇게 할 필요가 없었고 그로인해 배열의 길이까지 생각이 뻗쳐갔음.

잘한 점

  • 변수 선언은 잘했다.
profile
sparkle

0개의 댓글