철갑이의 이모저모

[Programmers] 체육복 with Python 본문

알고리즘

[Programmers] 체육복 with Python

철갑 2022. 1. 31. 17:37
728x90

문제

https://programmers.co.kr/learn/courses/30/lessons/42862

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr

풀이

1. 여벌 체육복을 가져온 학생이 도난당했을 경우는 체육복을 빌려줄 수 없는 케이스라고 볼 수 있다. 때문에 lost 와 reserve의 중복 값을 set 집합 자료형을 이용해 제거했다. set의 경우 sorted를 사용해 정렬이 된다. (다만, set을 list로 만들게 되면 순서가 랜덤으로 나열된다)

중복제거, 정렬 확인

2. 두 명(앞사람, 뒷사람)다 여분이 있을때는 앞사람(i-1)의 옷을 먼저 빌리도록 해야한다.

def solution(n, lost, reserve):
    _lost = set(lost) - set(reserve)
    _reserve = set(reserve) - set(lost)
    for i in _lost:
        if i - 1 in _reserve:
            _reserve.remove(i - 1)
        elif i + 1 in _reserve:
            _reserve.remove(i + 1)
        else:
            n-=1
    return n

728x90