Programmers

[프로그래머스 / 파이썬 풀이] 체육복

Hoo_Dev 2023. 1. 30. 11:08

실패 코드

def solution(n, lost, reserve):
    answer = 0
    every = []
    lost = sorted(lost)
    reserve = sorted(reserve)
    
    for i in range(1, n+1):
        if i not in lost:
            every.append(i)
        else:
            for j in reserve:
                if j in lost:
                    reserve.pop(0)
                    every.append(j)
                    break
                elif j - 1 == i or j + 1 == i:
                    reserve.pop(0)
                    every.append(i)
                    break
    a = set(every)
    print(a)
    return len(a)

3, 5, 7, 10 테스트 케이스를 실패하는 코드. 이유는 아직 찾고있다..

 

정답 코드

def solution(n, lost, reserve):
    set_reserve = set(reserve) - set(lost)
    set_lost = set(lost) - set(reserve)
    
    for i in set_reserve:
        if i - 1 in set_lost:
            set_lost.remove(i-1)
        elif i + 1 in set_lost:
            set_lost.remove(i+1)
            
    return n - len(set_lost)

 

여분을 가지고 있는 본인이 도난 당한 경우는 누구에게도 빌려주지 못하고 본인이 입어야 하므로

도난 당하지 않고, 여분이 없는 상태로 두어야 한다.

그러기 위해서 각 reserve와 lost를 set연산을 통해 겹치는 학생을 삭제 후 풀이한다.