체육복 문제 해설
"체육복 문제"를 탐욕 알고리즘(Greedy Algorithm)
을 이용해 해결하는 프로그램을 작성합니다.
학생들에게 체육복을 효율적으로 분배하여 체육수업에 참여할 수 있는 학생 수를 최대화
하는 것이 목표입니다.
함수 구현
-
학생 분류
:-
real_reserve
는 여분의 체육복을 가진 학생들 중 도난당하지 않은 학생들의 목록입니다. -
real_lost
는 체육복을 잃어버린 학생들 중 여분이 없는 학생들의 목록입니다.
-
-
체육복 분배
:-
여분의 체육복을 가진 각 학생(
real_reserve
)에 대해, 바로 앞번호(r - 1
)나 뒷번호(r + 1
)의 학생이 체육복이 없는 경우(real_lost
에 속함), 그 학생에게 체육복을 빌려줍니다. -
체육복을 받은 학생은
real_lost
목록에서 제거됩니다.
-
-
결과 반환
:- 체육복을 받지 못한 학생의 수(
len(real_lost)
)를 전체 학생 수(n
)에서 빼서 체육수업에 참여할 수 있는 학생 수를 반환합니다.
- 체육복을 받지 못한 학생의 수(
모범 답안
def solution(n, lost, reserve): # 학생 분류 real_reserve = [r for r in reserve if r not in lost] real_lost = [l for l in lost if l not in reserve] # 체육복 분배 for r in real_reserve: if r - 1 in real_lost: real_lost.remove(r - 1) elif r + 1 in real_lost: real_lost.remove(r + 1) # 결과 반환 return n - len(real_lost)
사용 예시
입출력 예시
print(solution(5, [2, 4], [1, 3, 5])) # 출력: 5
이 예시에서는 5명의 학생 중 2명이 체육복을 잃어버렸고, 3명이 여분의 체육복을 가지고 있습니다.
여분의 체육복을 가진 학생들이 앞뒤 번호의 학생들에게 체육복을 빌려줄 수 있으므로,
모든 학생이 체육수업에 참여할 수 있게 됩니다. 따라서 함수는 전체 학생 수인 5를 반환합니다.
가이드라인
AI 튜터
배포
디자인
업로드
수업 노트
즐겨찾기
도움말