[문제]
https://programmers.co.kr/learn/courses/30/lessons/42862
코딩테스트 연습 - 체육복
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번
programmers.co.kr
[풀이]
이 문제의 핵심은 제한사항의
여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.
부분이라고 생각한다.
한 학생이 lost와 reserve 리스트 둘 다에 포함된다면 그 학생은 두 리스트에서 빼주어야 한다. 집합으로 생각하면 쉬운데, 교집합을 제외한 집합을 구하면 된다.
두 리스트 모두 교집합을 제외한 값으로 갱신해 준 후, lost 리스트 원소를 차례대로 돌려 해당 원소의 -1 값이 reserve 리스트에 있다면 해당 값을 reserve 리스트에서 삭제한다. -1 값이 reserve 리스트에 없을 경우 +1 값이 reserve에 있는지 확인 후 있다면 reserve 리스트에서 삭제하고, +1 값도 없을 경우에는 체육복을 빌릴 수 없는 경우이기 때문에 전체 학생 수 n에서 1을 빼준다.
[코드]
def solution(n, lost, reserve):
_lost = list(set(lost).difference(reserve))
_reserve = list(set(reserve).difference(lost))
for i in _lost:
if (i - 1 in _reserve):
_reserve.remove(i-1)
elif (i + 1 in _reserve):
_reserve.remove(i+1)
else:
n -= 1
return n'문제풀이 > Programmers' 카테고리의 다른 글
| [프로그래머스][Lv1][Python] 최소직사각형 (0) | 2022.02.11 |
|---|---|
| [프로그래머스][Lv1][Python] k번째 수 (0) | 2022.02.10 |
| [프로그래머스][Lv1][Python] 예산 (0) | 2022.02.10 |
| [프로그래머스][Lv1][Python] 위클리 챌린지 4주차 직업군 추천하기 (0) | 2021.08.26 |
| [프로그래머스][Lv1][Python] 위클리 챌린지 2주차 상호 평가 (0) | 2021.08.26 |