알고리즘

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

hminor 2024. 3. 5. 10:51

풀이

  • 딕셔너리를 활용해서 학생의 수에 따른 각각의 체육복을 채워주고
  • 이후 여분의 체육복을 가진 학생과 잃어버린 학생의 교집합에 해당하는 학생에 대한 처리 후
  • 나머지 잃어버린 학생들에 대한 처리
  • 결과는 dic.values()에 있는 값 중 1을 넘어가는 값만 카운팅한 합을 출력하여 해결

 

def solution(n, lost, reserve):
    dic = {i:1 for i in range(1,n+1)}
    for i in reserve: dic[i] += 1
    s_re,s_lo = set(reserve),set(lost)
    for i in s_re.intersection(s_lo): dic[i] -=1
    for i in s_lo-s_re:
        dic[i] -= 1
        if dic[i] == 0:
            if dic.get(i-1) and dic[i-1] > 1: dic[i-1],dic[i] = dic[i-1]-1,1
            elif dic.get(i+1) and dic[i+1] > 1: dic[i+1],dic[i] = dic[i+1]-1,1
    return sum([1 if i >= 1 else 0 for i in dic.values()])