문제
Q. 다음과 같이 0 혹은 양의 정수로만 이루어진 배열이 있을 때,
왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 '✕' 혹은 '+' 연산자를 넣어
결과적으로 가장 큰 수를 구하는 프로그램을 작성하시오.
단, '+' 보다 '✕' 를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서 순서대로 이루어진다.
def find_max_plus_or_multiply(array):
# 이 부분을 채워보세요!
return 1
result = find_max_plus_or_multiply
print("정답 = 728 현재 풀이 값 =", result([0,3,5,6,1,2,4]))
print("정답 = 8820 현재 풀이 값 =", result([3,2,1,5,9,7,4]))
print("정답 = 270 현재 풀이 값 =", result([1,1,1,3,3,2,5]))
풀이 전 계획과 생각
- 0,1 이 나올 경우 곱셈보다 덧셈이 결과를 더 크게 할 수 있음
- 0,1 제외는 다 곱셈으로 처리
나의 풀이
def find_max_plus_or_multiply(array):
sum = array[0]
for num in array:
if num > 1 and sum > 0:
sum = sum * num
else:
sum = sum + num
return sum
result = find_max_plus_or_multiply
print("정답 = 728 현재 풀이 값 =", result([0,3,5,6,1,2,4]))
print("정답 = 8820 현재 풀이 값 =", result([3,2,1,5,9,7,4]))
print("정답 = 270 현재 풀이 값 =", result([1,1,1,3,3,2,5]))
정답 풀이
def find_max_plus_or_multiply(array):
plus_or_multiply_sum = 0
for number in array:
if number <= 1 or multiply_sum <= 1:
plus_or_multiply_sum += number
else:
plus_or_multiply_sum *= number
return plus_or_multiply_sum
result = find_max_plus_or_multiply
print("정답 = 728 현재 풀이 값 =", result([0,3,5,6,1,2,4]))
print("정답 = 8820 현재 풀이 값 =", result([3,2,1,5,9,7,4]))
print("정답 = 270 현재 풀이 값 =", result([1,1,1,3,3,2,5]))
문제를 풀고 알게 된 개념 및 소감
이 문제는 반복문을 통해 간단하게 구현하고, 문제를 잘 이해해 구현하면 해결되는 문제였다.
'백준' 카테고리의 다른 글
| [알고리즘] - 회문 검사 / 파이썬 (0) | 2025.09.02 |
|---|---|
| [알고리즘] - 링크드리스트 합 계산 (1) | 2025.08.28 |
| [백준] - 문자열 뒤집기(1439)/파이썬 (1) | 2025.08.25 |
| [백준] - 소수 나열하기(1929)/파이썬 (0) | 2025.08.25 |
| [알고리즘] - 반복되지 않는 문자 (0) | 2025.08.24 |