나의 풀이
def solution(n, lost, reserve):
# 1. Set을 만든다. lost와 reserve에 동시에 속에 있는 학생을 제외
reserve_only =set(reserve)-set(lost)
lost_only = set(lost) - set(reserve)
# 2. 여분을 기준으로 앞뒤를 확인하여 체육복을 빌려준다.
for reserve in reserve_only:
front= reserve-1
back =reserve+1
if front in lost_only: #항상 앞 먼저 확인하고, 앞에서 여벌을 주었을 때 그 학생번호를 제거하기 때문에 동일학생에 대하여 체육복을 2개주는 경우는 없다.
lost_only.remove(front)
elif back in lost_only:
lost_only.remove(back)
# 3. 전체 학생수에 lost_only에 남은 학생 수를 빼준다.
answer=n -len(lost_only) # len(lost_only)순수하게 체육복을 못 받은 학생 수
return answer
▶ 체육복 → 체육복 있는 (normal)학생, 도난당한 학생, 추가로 1벌(여별)이 있는 학생
▶ lost 배열과 reserve 배열에 둘 다 있는 학생은 여벌(reserve)가 있었는데 잃어(lost)버렸다.
→ 체육복 있는 (normal)학생이 된다.
▶ lost 배열과 reserve 배열을 set자료형으로 바꾼다.→Set자료형의 차집합(-)를 이용하여
reserve_only, lost_only로 만들어 준다.
▶ 입출력 예시2
n lost reserve return
5 [2, 4] [3] 4
→3번 학생이 2번학생한테 체육복을 빌려주는 경우 5명 중에서 4번학생(잃어버린)을 제외한
4명이 체육수업을 들을 수 있다.
→3번 학생이 4번학생한테 체육복을 빌려주는 경우 5명 중에서 2번학생(잃어버린)을 제외한
4명이 체육수업을 들을 수 있다.
다른 사람의 풀이
'프로그래머스(파이썬) > LV.1(파이썬)' 카테고리의 다른 글
완주하지 못한 선수→ Hash 또는 Counter함수 (0) | 2022.12.19 |
---|---|
다트 게임→ 정규식, findall(), recompile() + 스택을 표방한 리스트 (0) | 2022.12.19 |
로또의 최고순위와 최저순위★★ → "그외"처리 + in 연산자 +인덱스==등수 (0) | 2022.12.18 |
푸드 파이트 대회→deque() + while문 + cnt-=1→소모개념★★+ 우측에서 좌측으로 (0) | 2022.12.18 |
콜라 문제→ 치킨 쿠폰과 매우 유사★★ (0) | 2022.12.18 |