def solution(n, lost, reserve):
# 여벌 체육복이 있지만 도난당한 학생을 제외
reserve_set = set(reserve) - set(lost)
lost_set = set(lost) - set(reserve)
# 체육복을 빌려주는 과정
for c in reserve_set:
if c-1 in lost_set:
lost_set.remove(c-1)
elif c+1 in lost_set:
lost_set.remove(c+1)
# 최종적으로 체육복을 입을 수 있는 학생의 수
answer = n - len(lost_set)
return answer
해설
set 함수와 remove 함수 사용 / for 구문 안에 if , elif 를 통해 빌려줄 수 있는지 검증하고, 못빌린 학생 수를 구하여 이를 최종 학생 수에서 뺀다.
1. set 함수를 사용하여, 여벌 체육복이 있는 사람을 구한다.
-> 여벌 체육복이 있으면서 도난당하지 않아야 빌려줄 수 있기 때문에, 여벌 체육복이 있지만 도난당한 학생을 제외하여 reserve_set 이라는 걸러진 여벌체육복을 가진 학생을 구한다
2. set 함수를 사용하여, 체육복이 없는 사람을 구한다.
-> 여벌 체육복이 있으면서 도난을 당했으면, 빌릴 필요가 없기 때문에 도난 당했으면서 여벌체육복도 없는 학생을 lost_set 으로 구한다.
3. 여벌체육복이 있는 학생이, 도난당한 학생을 빌려줄 수 있는지 확인하고, 빌려줄 수 있으면 lost_set에 있는 학생을 제외한다.
-> 따라서 lost_set 에는 빌리지 못한 학생만 남게된다
4. 전체 학생수에서 체육복을 최종적으로 못빌린 학생 (lost_set) 수를 제외한 학생 수가 체육 수업을 들을 수 있는 학생 수 이다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
99클럽 코테 스터디 1일차 TIL 938. Range Sum of BST (0) | 2024.05.30 |
---|