PS/프로그래머스

체육복 (lv1)

ForteQook 2022. 7. 3. 18:24

도난을 당하지 않음

-여벌을 가져오지 않음 (1)

-여벌을 가져옴 (2)

도난을 당함

-여벌을 가져오지 않음 (0)

-여벌을 가져옴(1)

 

 위와 같이 학생은 네 그룹으로 나뉜다. 이 때 두 벌이 있는 학생들이 체육복이 없는 학생들에게 최대한 많이 빌려줘야 하는 상황인데, 다음과 같은 상황을 조심해야 한다.

0 2 0 2

 

0 1 1 2

 첫 번째 학생이 두 번째 학생에게 빌리고,  세 번째 학생이 네 번째 학생에게 빌렸으면 모두가 체육을 들을 수 있었는데, 위 상황은 그렇지 않다. 따라서 이 문제의 핵심은 체육복이 없는 학생 번호를 순서대로 나열해서 일정한 규칙으로 체육복을 빌리게 하는 것이다. sorted를 통해 오름차순으로 정렬하고, 번호가 작은 학생부터, 그 다음 학생이 체육복을 빌릴 수 있게 앞->뒤 순서로 두 벌이 있는 학생이 있는지 확인하면 된다.


코드

def solution(n, lost, reserve):
    answer = 0
    survivors = set(reserve)-set(lost) #두벌 있음
    victims = set(lost) - set(reserve) #진짜 없음
    for victim in sorted(victims):
        if victim > 1 and victim-1 in survivors:
            answer += 1
            survivors.remove(victim-1)
            continue
        if victim < n and victim+1 in survivors:
            answer += 1
            survivors.remove(victim+1)

    answer += n-len(victims)
    return answer

 

'PS > 프로그래머스' 카테고리의 다른 글

3진법 뒤집기 (lv1)  (0) 2022.07.04
실패율 (lv1)  (0) 2022.07.04
모의고사 (lv1)  (0) 2022.07.03
k번째 수 (lv1)  (0) 2022.07.03
완주하지 못한 선수 (lv1)  (0) 2022.07.03