[Programmers] level 1 - 탐욕법(Greedy); 체육복

Lynn·2022년 4월 13일
0

Algorithm

목록 보기
38/43
post-thumbnail

👩🏻‍💻 문제


👩🏻‍💻 정답 코드

def solution(n, lost, reserve):
    _lost = [i for i in lost if i not in reserve]
    _reserve = [i for i in reserve if i not in lost]

    _reserve.sort()
    
    for i in _reserve:
        if i-1 in _lost:
            _lost.remove(i-1)
        elif i+1 in _lost:
            _lost.remove(i+1)
            
    return n-len(_lost)

처음에는 lost, reserve 그대로 for 문에서 if i in lostlost.remove을 하니까 자꾸 테케 5, 12에서 실패해서 ㅠㅠ 한참을 헤메다가 질문 이것저것 보면서 해결하게 됐다.

https://programmers.co.kr/questions/21442

만약에 input이 3, [1,2], [2,3]이면 2번 학생은 lostreserve 모두에 있어서 빌려줄 수 없는 상황인데 1번 학생부터 i로 들어가서 2번 학생이 빌려주는 걸로 처리하는 게 되는 것...^^ 문제를 읽어 보면 "남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다" 라고 써 있다. 그래서 먼저 중복을 처리해주고 3, [1], [3] 이걸로 풀어야 하는 것이었다.

데이터가 정렬되어 있다고 한 적도 없기 때문에 sort 처리도 해 줘야 했음

하 레벨1인데 시간을 너무 많이 썼다...


👩🏻‍💻 Remember

_lost = [i for i in lost if i not in reserve]
# lost 중 reserve에 포함되지 않은 값만을 _lost에 저장
profile
wanderlust

0개의 댓글

관련 채용 정보