일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- DB
- fastapi
- union
- 맥북
- it자격증
- 은행IT
- 코딩테스트
- oracleapex
- 디렉토리계층구조
- 학점은행제무료강의
- 오라클
- 맥북환경설정
- jdk
- 프로그래머스
- Pass By Value
- SQL
- 컴퓨터공학학사취득
- python
- 계정계
- 모놀리식
- 렌탈스튜디오창업
- 학점은행제
- 의사결정나무모형
- MSA
- 개인프로필스튜디오창업
- 채널계
- Homebrew
- 맥북셋팅
- jdk17
- 코어뱅킹
- Today
- Total
개발머해니
[파이썬] 투자 귀재 규식이 Ⅰ 본문
실습 설명
규식이는 친구들 사이에서 투자의 귀재로 알려져 있습니다. 페이수북과 인수타그램에 자신의 성과를 과시하기 때문인데요. 사실 규식이가 그 정도의 실력자는 아닙니다. 성과가 좋을 때에만 SNS에 공유해서 그렇게 비춰질 뿐이죠.
계속해서 멋진 모습을 보여주기 위해, 특정 기간 중 수익이 가장 큰 구간을 찾아내는 함수 sublist_max()를 작성해 보려고 합니다.
Brute Force 방법을 이용해서 이 문제를 한번 풀어 봅시다!
함수 설명
우선 함수 sublist_max()는 파라미터로 리스트 profits를 받는데요. profits에는 며칠 동안의 수익이 담겨 있습니다. 예를 들어서 profits가 [7, -3, 4, -8]이라면 첫 날에는 7달러를 벌었고, 둘째 날에는 3달러를 잃었고, 셋째 날에는 4달러를 벌었고, 마지막 날에는 8달러를 잃은 거죠.
sublist_max() 함수는 profits에서 최대 수익을 내는 구간의 수익을 리턴합니다.
profits가 [7, -3, 4, -8]이라면 무엇을 리턴해야 할까요? profits에서 가장 많은 수익을 낸 구간은 [7, -3, 4]입니다. 이 구간에서 낸 수익은 8달러이니, 8을 리턴하면 되겠죠!
만약 profits가 [-2, -3, 4, -1, -2, 1, 5, -3]이라면? profits에서 수익이 가장 큰 구간은 [4, -1, -2, 1, 5]입니다. 이 구간에서 낸 수익은 7달러이니, 7을 리턴하겠죠?
실습 결과
def sublist_max(profits):
max_profit = profits[0] # 최대 수익
for i in range(len(profits)):
# 인덱스 i부터 j까지 수익의 합을 보관하는 변수
total = 0
for j in range(i, len(profits)):
# i부터 j까지 수익의 합을 계산
total += profits[j]
# i부터 j까지 수익의 합이 최대 수익이라면, max_profit 업데이트
max_profit = max(max_profit, total)
return max_profit
# 테스트 코드
print(sublist_max([4, 3, 8, -2, -5, -3, -5, -3]))
print(sublist_max([2, 3, 1, -1, -2, 5, -1, -1]))
print(sublist_max([7, -3, 14, -8, -5, 6, 8, -5, -4, 10, -1, 8]))
15
8
27
시간 복잡도
인풋 리스트 profits의 길이를 n이라고 할 때, n에 비례하는 반복문이 두 개가 중첩되어 있죠?
그렇기 때문에 시간 복잡도는 O(n²) 입니다.
'알고리즘' 카테고리의 다른 글
[파이썬] 빠르게 산 오르기 (0) | 2023.09.30 |
---|---|
[파이썬] 거듭 제곱 빠르게 계산하기 (0) | 2023.09.30 |
[파이썬] 수강 신청 분석 - 그리디 ★ (0) | 2023.09.30 |
[파이썬] 지각 벌금 적게 내기 분석 - 그리디 (0) | 2023.09.30 |
[파이썬] 최대 곱 구하기 - 그리디 (0) | 2023.09.24 |