[프로그래머스] 체육복

Jin Lee·2022년 5월 8일
0

프로그래머스 Lv.1

목록 보기
11/32
post-thumbnail

문제 링크

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

문제 설명

  • 체육복을 빌려줄 수 있는 reserve와 잃어버려서 빌려야하는 lost의 배열에 같은 숫자가 존재 할 수 있다. 만약 reverse와 lost에 동시에 존재한다면 체육복이 2개였지만 하나를 잃어버린 상태가 되어 빌려줄 수 없지만 빌리지는 않아도 되는 상태가 된다.
  • list를 set으로 바꾼 이유는 set은 집합 자료형으로 차집함 연산이 가능하기 떄문에 reverse와 lost에서 각각 빼내야 하는 부분을 효율적으로 제거 가능하다.
  • reserve_only(빌려줄 수 있는 번호들)의 원소들로 반복문을 돌면서 현재 원소의 앞 뒤 숫자가 lost_only(빌리기만 가능한 번호들)에 존재하면 lost_only에서 제거한다.
  • 전체 학생수에서 lost_only의 길이(빌리지 못한 학생의 수)를 제거한다.
def solution(n, lost, reserve):
    
    reserve_only = set(reserve) - set(lost)
    lost_only = set(lost) - set(reserve)
    
    for rev in reserve_only:
        
        front = rev - 1
        back = rev + 1
        
        if front in lost_only:
            lost_only.remove(front)
            
        elif back in lost_only:
            lost_only.remove(back)
            
    answer = n - len(lost_only)
    
    return answer
profile
깃허브 : https://github.com/jinlee9270

0개의 댓글