본문 바로가기
프로그래머스

프로그래머스: 체육복 | Python

by sxlvxrjxms2s2itsmes2s2 2024. 1. 24.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


제한사항
- 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다.
- 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.



예제 #1
1번 학생이 2번 학생에게 체육복을 빌려주고, 3번 학생이나 5번 학생이 4번 학생에게 체육복을 빌려주면 학생 5명이 체육수업을 들을 수 있습니다.

 

 

1. 풀이

def solution(n, lost, reserve):
    lost2 = set(lost)-set(reserve)
    reserve2 = set(reserve)-set(lost)
    
    for i in reserve2:
        if i-1 in lost2:
            lost2.remove(i-1)
        elif i+1 in lost2:
            lost2.remove(i+1)
    
    return n-len(lost2)

 

  • 마지막 제한사항으로 인해 중복을 제거해야합니다.
  • set함수로 제거하는 것이 용이합니다.

 

 

2. 문제와 관련한 기초 개념 (내가 헷갈린 것)

1) set()

  • 파이썬의 set은 중복된 원소를 허용하지 않고, 순서가 없는 변경 불가능한 컬렉션입니다.
  • set은 다양한 집합 연산을 지원하며, 이를 사용하여 교집합, 합집합, 차집합 등을 계산할 수 있습니다. 
set1 = {1, 2, 3, 4, 5}
set2 = {3, 4, 5, 6, 7}

# 교집합
intersection = set1 & set2  # 또는 set1.intersection(set2)

# 합집합
union = set1 | set2  # 또는 set1.union(set2)

# 차집합
difference = set1 - set2  # 또는 set1.difference(set2)

 

my_list = [1, 2, 2, 3, 4, 4, 5]
unique_set = set(my_list)

 

중복이 제거된 [1, 2, 3, 4, 5] 가 출력됩니다.