728x90
문제
여벌 체육복이 있는 학생이 도난당한 학생들에게 체육복을 빌려준다.
학생들의 번호는 체격 순으로 매겨져있어 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있다.
예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있다.
체육복을 적절히 빌려 최대한 많은 학생이 체육수업에 들어야한다.
도난당한 사람과 여분의 체육복이 있는 번호는 중복이 없으며, 여분의 체육복이 있는 학생이 도난당할 수도 있다.
입력
전체학생의 수 n, 도난당한 학생들의 번호가 담긴 리스트 lost, 여벌의 체육복을 가져온 학생 reserve가 입력된다.
출력
체육수업을 들을 수 있는 학생의 최댓값을 return
이번 문제에서 주의해야될 사항은 다음과같다.
- 전체 학생 중 도난당하거나 여벌의 체육복이 있는 사람 어느 곳에도 포함되지 않을 수 있다.
- 도난당한 학생이 여벌의 체육복을 가져올 수 있다.
- 입력되는 리스트에 중복으로 번호가 적히지 않는다.
이를 토대로 최종적으로 출력해야하는 것은 전체인원 중 결국 체육복을 못빌린 학생을 뺀 값이다.
이를 위해 lost와 reserve에 중복으로 포함된 번호를 set()의 차집합을 통해 제거한다.
lost에 있는 원소를 하나씩 제거해나가도록 한다.
이젠 중복이 제거된 reserve_set의 번호에서 앞번호, 뒷번호를 lost_set에 있는지 찾는다.
있다면 해당 원소를 제거한다.
최종적으로 전체 인원 중 체육복을 빌리지 못한 인원을 빼서 출력한다.
def solution(n, lost, reserve):
answer = 0
lost_set=set(lost)-set(reserve)
reserve_set=set(reserve)-set(lost)
for num in reserve_set:
if num-1 in lost_set:
lost_set.remove(num-1)
elif num+1 in lost_set:
lost_set.remove(num+1)
return n-len(lost_set)
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[Level1] 문자열 내림차순으로 배치하기 (0) | 2021.01.25 |
---|---|
[Level1] 콜라츠 추측 (0) | 2021.01.25 |
[Level1] 핸드폰 번호 가리기 (0) | 2021.01.23 |
[Level1] 자연수 뒤집어 배열로 만들기 (0) | 2021.01.23 |
[Level1] 소수찾기 (0) | 2021.01.23 |