[프로그래머스] 체육복

박지훈·2020년 12월 2일
0

문제

링크



풀이

  1. reserve 리스트의 각각 값에서 -1, +1한 값이 lost에 있는지 탐색

  2. 값이 lost에 있다면 lost 리스트의 해당값 삭제

  3. 없다면 reserve의 다음값으로 진행

  • reserve와 lost는 중복이 없어야 함 / 또한, 여벌의 체육복을 가져온 학생이 있다면 (lost와 reserve에 중복된 값이 존재) 그 학생은 체육복을 못빌려주는 상태임 -> 중복값을 제거해야함!

  • 왼쪽 (-1) 부터 탐색을 시작해야한다. -> 작은값부터 탐색해야 여벌 체육복이 남지 않도록 체육복을 빌려줄 수 있다고 생각하였다.



코드

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)

print(solution(5, [2, 4], [1, 3, 5]))
print(solution(5, [2, 4], [3]))
print(solution(3, [3], [1]))
profile
Computer Science!!

0개의 댓글