이숭간 공부기록

[프로그래머스] 파이썬 _ 체육복 본문

알고리즘/프로그래머스

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

이숭간 2021. 7. 3. 15:27
728x90

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

 

코딩테스트 연습 - 체육복

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

programmers.co.kr

 

문제유형 : 그리디

 

문제풀이

  • 여분을 가진 학생도 도난을 당할수 있다 라는 예외처리를 잘 해주어야함
    • 이때 해당학생은 reserve와 lost에서 모두 제거해줘야함 ( 집합의 차집합연산 이용 )
  • 나를 기준으로 앞에 애한테 줄수있는 상황이면 앞에애한테 먼저 주는식으로 reserve를 반복한다.
  • 내가 만약 앞에 애와 뒤에애한테 모두 줄 수 잇는 상황일때 뒤에애한테 줘버리면 맨앞에애는 못받을수도잇는 상황이 되므로....

 

정답코드 :

def solution(n, lost, reserve):   
    
    lost = set(lost)
    reserve = set(reserve)
    # 여벌체육복을 가져온 학생이 체육복을 도난당했을경우 reserve에서 제외
    
    common = lost & reserve
    lost = list(lost - common)
    reserve = list(reserve - common)
    
    reserve.sort()
    
    for i in reserve:
        a,b = i-1, i+1
        if a in lost:
            lost.remove(a)
            continue
        if b in lost:
            lost.remove(b)
    
    return n-len(lost)