일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 파이썬
- 2630번
- github
- SecurityFilterChain
- 11727번
- 18406번
- 입이 트이는 영어
- 영어
- 백준
- python
- 분할정복
- 프로그래머스
- 신규아이디추천
- caniuse
- 9251번
- BinaryGap
- 1057번
- WebSecurityConfigurerAdapter
- 권주현의 진짜 영국 영어
- Java
- 1759번
- codility
- 알고리즘
- 11047번
- programmers
- EBS어학당
- 1793번
- 1992번
- Spring Security
- 2163번
Archives
- Today
- Total
철갑이의 이모저모
[Programmers] 체육복 with Python 본문
728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/42862
코딩테스트 연습 - 체육복
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번
programmers.co.kr
풀이
1. 여벌 체육복을 가져온 학생이 도난당했을 경우는 체육복을 빌려줄 수 없는 케이스라고 볼 수 있다. 때문에 lost 와 reserve의 중복 값을 set 집합 자료형을 이용해 제거했다. set의 경우 sorted를 사용해 정렬이 된다. (다만, set을 list로 만들게 되면 순서가 랜덤으로 나열된다)
2. 두 명(앞사람, 뒷사람)다 여분이 있을때는 앞사람(i-1)의 옷을 먼저 빌리도록 해야한다.
답
def solution(n, lost, reserve):
_lost = set(lost) - set(reserve)
_reserve = set(reserve) - set(lost)
for i in _lost:
if i - 1 in _reserve:
_reserve.remove(i - 1)
elif i + 1 in _reserve:
_reserve.remove(i + 1)
else:
n-=1
return n
728x90
'알고리즘' 카테고리의 다른 글
[codility] CyclicRotation with Python (0) | 2022.04.14 |
---|---|
[codility] BinaryGap with Python (0) | 2022.04.11 |
[Programmers] 숫자 문자열과 영단어 with Python (0) | 2022.01.29 |
[Programmers] 신규 아이디 추천 with Python (0) | 2022.01.29 |
[Programmers] 정수 삼각형 with Python (0) | 2020.12.02 |