Algorithm/프로그래머스

99클럽 코테 스터디 6일차 체육복

Albosa2lol 2024. 6. 5. 09:26

 

 

 

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) 수를 제외한 학생 수가 체육 수업을 들을 수 있는 학생 수 이다.