LEVEL1/체육복

Q·2021년 8월 6일
0

문제 설명


전체 코드

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)

해결 방법

Level1 중에서 가장 생각을 많이 한 문제 인것 같다. 내가 푼 방법은 그리디 라기보단 구현에 가까워서 그리디로 푼 사람의 코드를 참고 했다.

문제의 키워드는 reserve와 lost 리스트는 서로 중복된게 있으면 안된다는 것이다. 따라서 set으로 분리하여 reserve에서 lost와 중복된 것을 뺀 set_reserve와 그 의 반대인 set_lost를 만든다. 그리고 set_reserve에서 양 옆에 수가 set_lost에 있다면 여별의 체육복을 나누어 줄 수 있으므로 그 수를 set_lost에서 제거시킨다. 그리고 전체 학생수에서 set_lost에 있는 리스트 수만을 빼면 답이 나온다.

profile
Data Engineer

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN