도난을 당하지 않음
-여벌을 가져오지 않음 (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 |