반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 렌탈스튜디오창업
- 모놀리식
- 맥북
- 프로그래머스
- 디렉토리계층구조
- 오라클
- 채널계
- 은행IT
- 학점은행제무료강의
- fastapi
- 코어뱅킹
- 개인프로필스튜디오창업
- DB
- 코딩테스트
- Pass By Value
- jdk
- 학점은행제
- 의사결정나무모형
- MSA
- union
- SQL
- Homebrew
- 맥북셋팅
- it자격증
- 계정계
- 컴퓨터공학학사취득
- jdk17
- python
- oracleapex
- 맥북환경설정
Archives
- Today
- Total
개발머해니
[파이썬] 수강 신청 분석 - 그리디 ★ 본문
728x90
반응형
실습 설명
이번 학기 코드잇 대학교의 수업 리스트가 나왔습니다.
[(4, 7), (2, 5), (1, 3), (8, 10), (5, 9), (2, 6), (13, 16), (9, 11), (1, 8)]
리스트에 담겨있는 튜플들은 각각 하나의 수업을 나타냅니다. 각 튜플의 0번째 항목은 해당 수업의 시작 교시, 그리고 1 번 항목은 해당 수업이 끝나는 교시입니다. 예를 들어서 0번 인덱스에 있는 튜플값은 (4, 7)이니까, 해당 수업은 4교시에 시작해서 7교시에 끝나는 거죠.
(2, 5)를 듣는다고 가정합시다. (4, 7) 수업은 (2, 5)가 끝나기 전에 시작하기 때문에, 두 수업은 같이 들을 수 없습니다. 반면, 수업 (1, 3)과 (4, 7)은 시간이 겹치지 않기 때문에 동시에 들을 수 있습니다.
(단, (2, 5), (5, 7)과 같이 5교시에 끝나는 수업과 5교시에 시작하는 수업은 서로 같이 듣지 못한다고 가정합니다)
열정이 불타오르는 신입생 지웅이는 최대한 많은 수업을 들을 수 있는 수업 조합을 찾아주는 함수 course_selection 함수를 작성하려고 합니다.
course_selection은 파라미터로 전체 수업 리스트를 받고 가능한 많은 수업을 담은 리스트를 리턴합니다
실습 결과
def course_selection(course_list):
# 수업을 끝나는 순서로 정렬한다
sorted_list = sorted(course_list, key=lambda x: x[1])
# 가장 먼저 끝나는 수업은 무조건 듣는다
my_selection = [sorted_list[0]]
# 이미 선택한 수업과 안 겹치는 수업 중 가장 빨리 끝나는 수업을 고른다
for course in sorted_list:
# 마지막 수업이 끝나기 전에 새 수업이 시작하면 겹친다
if course[0] > my_selection[-1][1]:
my_selection.append(course)
return my_selection
# 테스트 코드
print(course_selection([(6, 10), (2, 3), (4, 5), (1, 7), (6, 8), (9, 10)]))
print(course_selection([(1, 2), (3, 4), (0, 6), (5, 7), (8, 9), (5, 9)]))
print(course_selection([(4, 7), (2, 5), (1, 3), (8, 10), (5, 9), (2, 5), (13, 16), (9, 11), (1, 8)]))
[(2, 3), (4, 5), (6, 8), (9, 10)]
[(1, 2), (3, 4), (5, 7), (8, 9)]
[(1, 3), (4, 7), (8, 10), (13, 16)]
해설
- 시간복잡도
course_list의 길이를 n이라고 하면 정렬시키는 부분의 시간 복잡도는 O(nlgn)입니다.
그 후 반복문을 도는 부분은 O(n)이겠죠?
그럼 총 시간 복잡도는 O(nlgn+n)이기 때문에 결국 O(nlgn)이 되겠네요.
728x90
반응형
'알고리즘' 카테고리의 다른 글
[파이썬] 거듭 제곱 빠르게 계산하기 (0) | 2023.09.30 |
---|---|
[파이썬] 투자 귀재 규식이 Ⅰ (0) | 2023.09.30 |
[파이썬] 지각 벌금 적게 내기 분석 - 그리디 (0) | 2023.09.30 |
[파이썬] 최대 곱 구하기 - 그리디 (0) | 2023.09.24 |
[파이썬] 최소 동전으로 거슬러 주기 - 그리디 (0) | 2023.09.24 |