알고리즘

프로그래머스(programmers) 체육복 python 정답 [Greedy Algorithm]

TheSapper 2023. 2. 10. 04:41
반응형

프로그래머스(programmers) 체육복 python 정답 [Greedy Algorithm]

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 정답

입력 예

def solution(n, lost, reserve):
    net_lost = set(lost) - (set(reserve))
    net_reserve = set(reserve)-(set(lost))
    answer = n - len(net_lost)    
    for l in sorted(net_lost):
        if l-1 in net_reserve:
            answer+=1
            net_reserve.remove(l-1)
            continue
        if l+1 in net_reserve:
            answer+=1
            net_reserve.remove(l+1)
            continue            
    return answer

문제 해설

해당 문제는 함정이 있는데, lost와 reserve에 둘 다 있는 요소가 있을 수 있다는 것이다.

따라서 각각 교집합 요소를 빼준다.

그냥 서로 집합 difference 연산을 해주면 된다.

그 다음 한 집합의 키를 정렬하고, 다른 집합에서 작거나 큰 것부터 하나 하나 집어 가주면 그게 최대값이다.

즉 작은 사람은 최대한 작은것,

혹은 큰 사람은 최대한 큰걸 가져가도록 하면 된다.

 

반응형