🔧알고리즘

[프로그래머스]체육복, 파이썬(python)

PangLog 2022. 6. 9. 19:47

문제링크

 

 

 

✨Idea

여분의 체육복이 있는 경우도 도난당하게 된다면 빌려줄 수가 없으므로 lost와 reserve에서 서로 겹치는건 뺀다 그 후 체육복이 있는 인덱스는 True로 처리 후 여분의 학생이 앞 뒤를 체크하며 빌려주면 된다

 

그러나 아래의 소스코드에서 오름차순 과정이 없다면, 먼저 좌쯕체크 후 우측을 체크하는과정만을 거쳐 예외 케이스가 발생한다

 

예를 들어 아래와 같은 상황이다

 

n = 5

lost = [2, 4], reserve = [3, 1]

 

정상적인 상황이라면 1번 학생이 2번에게 3번 학생이 4번에게 빌려 줄 수 있으나, 정렬을 하지 않는다면 3번이 2번에게 빌려주어 4번 학생은 빌릴 수가 없게되므로 처음에 reserve를 정렬하는 과정이 필요하다

 

(2021년 8월 30일 테스트케이스가 추가되었습니다. 에 해당하는 18, 20번 Test Case가 예외상황인 것 같다.)

 

소스코드

 

reserve.sort()
final_reserve = [x for x in reserve if x not in lost]
lost = [x for x in lost if x not in reserve]

check = [True] * n

for i in range(n):
    for j in lost:
        check[j-1] = False

for reserve in final_reserve:
    if (reserve - 1) in lost and check[reserve - 2] == False:
        check[reserve - 2] = True
    elif (reserve + 1) in lost and check[reserve] == False:
        check[reserve] = True

 

반응형