Algorism/Python

프로그래머스 - 체육복

aoaa 2022. 3. 3. 23:41

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

def solution(n, lost, reserve):
    answer = []
    #체육복을 잃어버린 학생 중 여벌이 없는 학생 =참가불가
    set_lost = set(lost)-set(reserve)
    #체육복 여벌이 있던 학생 중 잃어버린 학생빼고 =빌려줄수있는 학생
    set_reserve = set(reserve)-set(lost)

    #참가 가능한 학생 중
    for i in set_reserve:# 그 왼쪽이 체육복이 없는 경우
        if i-1 in set_lost:
            set_lost.remove(i-1)
        elif i+1 in set_lost: #그 오른쪽이 없는 경우
            set_lost.remove(i+1) 
    answer = n-len(set_lost)
    return answer

문제에 앞서, 제한사항 5번을 보면 여벌의 체육복을 가진 학생도 도난 당했을 수 있다는 조건이 있습니다.

즉 lost(체육복 도난당한 학생)와 reserve(여벌 체육복이 있는 학생)이 공통으로 존재할 수 있는겁니다.

예를 들어, lost = [3, 4, 5], reserve = [1, 2, 3]이 된다면

제한사항 5번에 의해 여벌의 체육복을 1개로 가정하고 3은 체육복을 빌려줄 수 없습니다.

 

먼저 체육복을 잃어버린 학생 중에 여벌이 없는 경우(빌려주기 불가)와,

체육복 여벌이 있던 학생 중에 잃어버린 학생을 제외한 경우(빌려주기 가능)를 변수 선언했습니다. 

set 함수를 이용하게 되면, list안의 값에서 중복되는 값을 제거하게 됩니다.

 

반복문에서 체육복이 있으며 빌려 줄 수 있는 학생들 중에 

왼쪽에 있는 학생이 체육복이 없는 경우와 

오른쪽 학생이 없는 경우를 고려하여 Remove 시켜준다.

 

 

 

 

 

 

'Algorism > Python' 카테고리의 다른 글

자릿수의 합  (0) 2022.03.07
정다면체  (0) 2022.03.07
프로그래머스 - 크레인 인형뽑기 게임  (0) 2022.03.04
대표값 구하기  (0) 2022.03.04
최솟값 구하기  (0) 2022.03.03