본문 바로가기
문제 풀이/프로그래머스 (Programmers)

[Python] 프로그래머스 : 체육복

by 희조당 2022. 6. 30.
728x90

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

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr


 문제 풀이

탐욕법으로 푸는 문제이다.

 

주어진 조건을 보면

여벌의 체육복을 가져온 학생도 도난을 당할 수가 있다. 

따라서, lost 배열에서도 reserve 배열에서도 서로 존재 여부를 확인하고 빼줘야한다.

보통 순회를 할 때 왼쪽에서 오른쪽으로 이동하기 꼭 왼쪽 값부터 확인해야한다. 

그렇기 때문에 정렬을 해줘야한다. 정렬 하지 않는다면 lost = [1,2] reserve = [2,3] 의 Test Case에서 실패한다. 

 느낀 점

크게 어렵지 않았지만 열 받는 문제였다.

어떻게 보면 도움이 되었다. 문제를 잘 읽어야한다는 점정렬된 배열이라는 말이 없으면 정렬을 해야한다는 점.

 코드

def solution(n, lost, reserve):
    reserve_ = [r for r in reserve if r not in lost]
    lost_ = [l for l in lost if l not in reserve]
    reserve_.sort()
    
    for r in reserve_:
        if r-1 in lost_: lost_.remove(r-1)
        elif r+1 in lost_: lost_.remove(r+1)
                    
    return n - len(lost_)

댓글