[프로그래머스 | Greedy] 체육복, Python

·2022년 1월 10일
0

프로그래머스

목록 보기
3/11

Naive approach

def solution(n, lost, reserve):
    answer = 0
    available = n - len(lost)
    lost.sort()
    
    for l in lost:
        if l - 1 in reserve:
            reserve.remove(l-1)
            available += 1
            pass
        elif l + 1 in reserve:
            reserve.remove(l+1)
            available += 1
            pass
    
    answer = available
    return answer

5번 테케에서 계속 오류 발생.
lost이면서 reserve인 케이스를 처리하지 않아서 문제 발생한 것으로 추정

🏆 정답 - 예외 케이스 제거

def solution(n, lost, reserve):
    answer = 0
    lost.sort()
    # 여분 있는데 도난당한 학생 제거
    lost_ = set(lost)
    reserve_ = set(reserve)
    both = lost_.intersection(reserve_)
    for b in list(both):
        lost.remove(b)
        reserve.remove(b)
        
    # lost인 학생 여벌 찾아주기
    available = n - len(lost)
    for l in lost:
        if l - 1 in reserve:
            reserve.remove(l-1)
            available += 1
        elif l + 1 in reserve:
            reserve.remove(l+1)
            available += 1
    
    answer = available
    return answer

정석적인 DP로 푼 것 같진 않지만, 어쨌든

  • lost를 소팅하고 for loop를 돌고 있으며,
  • l-1, l+1 순서대로 비교

하고 있기 때문에 최대의 해를 구하는 데에는 문제가 없다.

profile
튼튼

0개의 댓글