Python/Programmers

Lv.1-체육복

JAEJUNG 2021. 7. 7. 15:32

문제

전체 학생 수 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