728x90
*문제 출처는 프로그래머스에 있습니다.
문제 제목: 체육복
문제 사이트: https://programmers.co.kr/learn/courses/30/lessons/42862
풀이
def solution(n, lost, reserve):
new_lost = list(set(lost) - set(reserve))
new_reserve = list(set(reserve) - set(lost))
lost, reserve = new_lost, new_reserve
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
set함수를 이용하여 중복을 제거하여주었다.
set함수는 중복을 허용하지 않기 때문에 값들을 필터하는데 쓰이기도 하며 집합을 구할 때 많이 사용된다.
(set함수 사용법 : https://justmakeyourself.tistory.com/entry/python-set)
모범답안
def solution(n, lost, reserve):
_reserve = [r for r in reserve if r not in lost]
_lost = [l for l in lost if l not in reserve]
for r in _reserve:
f = r - 1
b = r + 1
if f in _lost:
_lost.remove(f)
elif b in _lost:
_lost.remove(b)
return n - len(_lost)
※ 알아야 할 것
- 중복값제거가 필요하다. 첫번째 풀이에서는 set함수로 reserve와 lost 사이의 중복을 제거해주었다.
- 두번째 풀이에서는 for 문과 if 문을 이용하여 중복값을 제거해주었다.
728x90
'coding test - python > Programmers' 카테고리의 다른 글
Programmers / 핸드폰 번호 가리기 / Python (0) | 2022.03.29 |
---|---|
Programmers / 직사각형 별찍기 / Python (0) | 2022.03.29 |
Programmers / x만큼 간격이 있는 n개의 숫자 / Python (0) | 2022.03.29 |
Programmers / 평균구하기 / Python (0) | 2022.03.10 |
Programmers / 수박수박수박수박수박수? / Python (0) | 2022.03.10 |