체육복

Mkim4·2023년 6월 23일
1


def solution(n, lost, reserve):
    u = [1] * (n+2) #헛깨비 2개 만들기
    for i in reserve: #i에는 여벌의 체육복을 가져온 학생들의 번호
        u[i] += 1
    for i in lost: #i에는 체육복을 잃어버린 학생들의 번호
        u[i] -= 1
    for i in range(1,n+1):
        if u[i-1] == 0 and u[i] == 2:
            u[i-1:i+1] = [1,1]
        elif u[i+1] == 0 and u[i] == 2:
            u[i:i+2] = [1,1]
    return len([x for x in u[1:-1] if x>0])

n의 크기가 매우 크고 체육복을 잃어버린 학생 수가 별로 없다면?

def solution(n, lost, reserve):
    s = set(lost) & set(reserve) # &는 교집합을 뜻함
    l = set(lost) - s            # 체육복을 빌려야하는 학생들
    r = set(reserve) - s         # 체육복을 빌려줄 수 있는 학생들
    for x in sorted(r):
        if x-1 in l:
            l.remove(x-1)
        elif x+1 in l:
            l.remove(x+1)
    return n - len(l)
profile
귀요미 개발자

0개의 댓글