알고리즘/기타

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

bunbun2 2022. 11. 30. 20:28

오늘 들었던 내일배움캠프 알고리즘 강의의 문제! 이름은.. 곱하기 or 더하기 (?) 인것같다

(강사님께서 말씀하시길 페이스북 기출문제 였다고 한다. 아마도 엄청 과거이지 않을까 싶다)

 

Q. 다음과 같이 0 혹은 양의 정수로만 이루어진 배열이 있을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 '✕' 혹은 '+' 연산자를 넣어 결과적으로 가장 큰 수를 구하는 프로그램을 작성하시오. 단, '+' 보다 '✕' 를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서 순서대로 이루어진다.
input = [0, 3, 5, 6, 1, 2, 4]

 

 

요약하자면, 왼쪽부터 숫자들끼리 하나씩 더하거나 곱해서, 만들 수 있는 가장 큰 수를 찾아라!

 

 

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

def findMaxPlusOrMultiply(array):
#구현
	return 0



result = findMaxPlusOrMultiply(input)
print(result)

이 함수 내부를 구현하면 된다!

결과값이 728이 나오면 성공!

 

 

 

 

 

 

pseudo code 의사코드

 

1. 필요한 주요 변수

  1) 연산 후의 결과를 담을 result

  2) 연산할 값 n

 

2. +(더하기), *(곱하기) 중 어떤 연산자를 써야 최종값이 더 커질까?

  1) 더해야 하는 경우 = 연산값 n이 0과 1 일 경우, (n <= 1)

  2) 곱해야 하는 경우 = 연산값 n이 0과 1이 아닐 경우. (n > 1)

 

3. 어떤 상황에 예외처리가 필요할까?

  1) n>1이지만, result <= 1 이어서 곱하지 않고 더해줘야 하는 경우

 

 

 

전체 코드

 

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


def findMaxPlusOrMultiply(array):

    result = 0

    for num in array:

        if result <= 1 or num <= 1: 	# 의사코드 2-1과 3-1에 대한 처리!
            result += num
        else:				# 의사코드 2-2에 대한 처리!!
            result *= num

    return result


result = findMaxPlusOrMultiply(input)
print(result)

 

반복문을 통해 간단하게 구현이 가능!

 

문제를 잘 이해하는게 가장 중요한 문제였다!