Published:
Updated:

  • 이런 저런 일이 있어서 알고리즘은 진짜 오랜만이다.
  • 다시 꾸준히 해보자.


Solution

from typing import List


def solution(n: int, lost: List[int], reserve: List[int]) -> int:
    # 각 배열의 고유의 학생 만들기
    lost_only = list(set(lost) - set(reserve))
    reserve_only = list(set(reserve) - set(lost))

    # 고유의 현재 reserve의 학생의 앞과 뒤를 확인하여 빌려주기
    for current_reserve in reserve_only:
        # 왜 "- 1"이 front냐고 생각할 수 있는데,
        # [1, 2, 3]번 학생이 있고, 현재가 2라고 치면 당연히 앞에 있는 학생은 1이겠지
        front = current_reserve - 1
        back = current_reserve + 1

        if front in lost_only:
            lost_only.remove(front)
            continue

        if back in lost_only:
            lost_only.remove(back)

    return n - len(lost_only)


print(solution(5, [2, 4], [1, 3, 5]))
print(solution(5, [2, 4], [3]))
print(solution(3, [3], [1]))


Reference

Leave a comment