문제
전체 학생 수 n, 도난당한 학생 lost, 여분을 가지고 온 학생 reserve 배열이 주어진다.
여분을 가지고 온 학생은 자기 번호의 +1, -1의 학생에게 빌려줄 수 있다.
최대한 많이 수업을 참여할 수 있는 학생의 수를 return 하시오.
✅ 여분을 가지고 온 학생 또한 도난당할 수 있다.
내 코드
def solution(n, lost, reserve):
#여분이 있지만 도난당한 학생
reser_lost=set(lost)&set(reserve)
tmp=[]
cnt=0
for i in list(reser_lost):
lost.remove(i)
reserve.remove(i)
normal = n - len(lost) - len(reserve)
for i in reserve:
if i-1 in lost:
tmp.append(i)
lost.remove(i-1)
cnt += 2
for i in tmp:
if i in reserve:
reserve.remove(i)
for i in reserve:
if i+1 in lost:
tmp.append(i)
lost.remove(i+1)
cnt += 2
for i in tmp:
if i in reserve:
reserve.remove(i)
return len(reserve) + cnt + normal
solution(3, [3], [1])
문제 풀이
1. 먼저 set() & set()을 통해 여분이 있지만 도난당한 학생의 수를 구한다.(reser_lost)
2. reser_lost 값은 각각 lost, reserve 배열에서 제거해준다.
3. 평범한 학생→ 여분이 있지도, 도난당하지도 않은 학생의 수를 구한다.(normal)
4. -1, +1을 했을 때 lost 배열에 있으면 cnt값을 2 해주고(빌려준 학생, 잃어버린 학생은 수업 참여 가능) lost, reserve 배열에서 삭제해준다.
5. 여분이 남아있는 학생 + 빌려준 학생 + 잃어버렸지만 빌린 후 참여가 가능한 학생 + normal을 return 해준다.
'Python > Programmers' 카테고리의 다른 글
Lv.1-크레인 인형뽑기 (0) | 2021.07.07 |
---|---|
Lv.1-모의고사 (0) | 2021.07.07 |
Lv.1-로또의 최고 순위와 최저 순위 (0) | 2021.07.07 |
Lv.1-음양 더하기 (0) | 2021.07.07 |
Lv.1-소수 찾기 (0) | 2021.07.07 |