<aside>
💬 lv1
, 자료 구조
위니브 대학에는 월요일에 진행되는 여러 강의가 주어집니다. 각 강의는 시작 시간, 종료 시간, 강의명, 강의 유형(예: 전공 필수, 전공 선택), 강사명, 그리고 학점을 포함합니다. 시작 시간과 종료 시간은 24시간 형식으로 주어지며, 여러분은 겹치지 않는 강의를 선택하여 받을 수 있는 최대 학점을 계산하고, 그 과목명을 시간 순서대로 출력하는 프로그램을 작성해야 합니다. 강의는 시간표 상에서 겹치지 않게 배열되어야 합니다. 겹치는 시간대의 강의가 있을 수 있으므로, 최적의 선택을 통해 최대 학점을 얻는 시간표를 구성해야 합니다.
입력 (강의 정보 리스트) | 출력 (선택된 강의의 과목명 리스트) |
---|---|
[{"name": "알고리즘", "type": "전공 필수", "start": "09:00", "end": "10:30", "instructor": "이교수", "credit": 3},{"name": "데이터베이스", "type": "전공 필수", "start": "10:30", "end": "12:00", "instructor": "한교수", "credit": 3}, {"name": "인공지능", "type": "전공 선택", "start": "10:45", "end": "12:15", "instructor": "박교수", "credit": 3}] | ["알고리즘", "데이터베이스"] |
[{"name": "운영체제", "type": "전공 필수", "start": "13:00", "end": "14:30", "instructor": "최교수", "credit": 3}, {"name": "컴퓨터 네트워크", "type": "전공 선택", "start": "14:30", "end": "16:00", "instructor": "정교수", "credit": 3}] | ["운영체제", "컴퓨터 네트워크"] |
[{"name": "웹 프로그래밍", "type": "전공 필수", "start": "09:00", "end": "10:50", "instructor": "조교수", "credit": 2}, {"name": "디지털 디자인", "type": "전공 선택", "start": "11:00", "end": "12:50", "instructor": "김교수", "credit": 2}, {"name": "컴파일러", "type": "전공 필수", "start": "13:00", "end": "14:50", "instructor": "박교수", "credit": 3}] | ["웹 프로그래밍", "디지털 디자인", "컴파일러"] |
def calculate_max_credits(lectures):
sorted_lectures = sorted(lectures, key=lambda x: x["end"]) **#1 정렬**
max_credits = 0
last_end_time = "00:00" **#2 변수 선언**
for lecture in sorted_lectures: **#3 시간에 따른 조건문**
if lecture["start"] >= last_end_time:
max_credits += lecture["credit"]
last_end_time = lecture["end"]
return max_credits **#4 결과 반환**
정렬
주어진 데이터를 강의의 끝나는 시간을 기준으로 정렬합니다.
변수 선언
최대 학점과 이전 강의가 끝나는 시간 변수를 초기화 해줍니다.
시간에 따른 조건문
현재 강의의 시작 시간이 이전 강의가 끝난 시간보다 늦거나 같다면, 이 강의를 수강할 수 있으므로 max_credits
에 현재 강의의 학점을 추가하고, last_end_time
을 현재 강의의 끝나는 시간으로 갱신 후 반환합니다.
결과 반환
최대 학점을 반환해줍니다.
sorted
기본 형태: sorted()
개념: 정렬을 수행하는 함수로, 리스트, 튜플, 문자열 등의 시퀀스를 정렬하여 정렬된 새로운 리스트를 반환합니다. 원본은 수정되지 않습니다.
num = [3, 1, 4, 1, 5, 9, 2, 6, 5]
# 리스트를 정렬하여 새로운 리스트 생성
sorted_num = sorted(num)
print(sorted_num) # 출력: [1, 1, 2, 3, 4, 5, 5, 6, 9]
def solution(courses):
courses.sort(key=lambda x: x['start']) **#1 정렬**
selected_courses = [] **#2 변수 선언**
total_credit = 0
end_time = "00:00"
for course in courses: **#3 시간에 따른 조건문**
if course['start'] >= end_time:
selected_courses.append(course['name'])
total_credit += course['credit']
end_time = course['end']
return selected_courses **#4 결과 반환**
정렬
주어진 데이터를 강의의 시작 시간을 기준으로 정렬합니다.
변수 선언
선택된 강의 리스트와 총 학점, 이전 강의의 종료 시간을 초기화할 변수를 선언합니다.
시간에 따른 조건문
현재 강의의 시작 시간이 이전 강의의 종료시간 이후하면 현재 강의를 선택하고 현재 강의의 학점점을 총 학점에 추가합니다. 그리고 이전 강의의 종료 시간을 업데이트해줍니다.
결과 반환
선택된 강의 리스트를 반환합니다.