본문 바로가기

알고리즘/프로그래머스

[프로그래머스 코딩테스트 고득점 Kit / 탐욕법(Greedy)] 체육복 (python)

728x90

풀이

def solution(n, lost, reserve):
    lost = set(lost)
    reserve = set(reserve)
    
    for i in lost & reserve:
        lost.remove(i)
        reserve.remove(i)
        
    sorted_lost = sorted(lost)
        
    for i in sorted_lost:
        if i-1 in reserve:
            lost.remove(i)
            reserve.remove(i-1)
        elif i+1 in reserve:
            lost.remove(i)
            reserve.remove(i+1)
    
    return n - len(lost)

내 풀이

  • lost와 reserve는 중복이 없다고 했으므로 set으로 만든다. 둘의 교집합이 생기는 경우 자기 체육복을 입으면 되므로 교집합 먼저 처리해준다. 그리고 각 배열에서 학생을 없애준다.
  • lost 배열을 정렬하여 sorted_lost에 저장하고 앞에서부터 순서대로 빌려줄 학생이 있는지 검색한다.
  • answer은 전체학생(n)에서 체육복이 없는 학생(len(lost))을 빼주면 된다.
반응형