프로그래머스 LV1 - 체육복
내 풀이
def solution(n, lost, reserve):
copied = []
for man in reserve:
if man in lost:
copied.append(man)
lost.remove(man)
for copy in copied:
reserve.remove(copy)
lost.sort()
for man in reserve:
if man - 1 in lost:
lost.remove(man-1)
elif man + 1 in lost:
lost.remove(man+1)
return n - len(lost)
다른 풀이
def solution(n, lost, reserve):
#여벌 가져온 학생이 도난당한 번호 찾기
spare_stolen = set(lost) & set(reserve)
#spare_stolen로 겹치는거 제거해주기
# +정렬해주기!!!(앞번호부터 비교해야하기 때문)
lost = sorted(list(filter(lambda x : x not in spare_stolen, lost)))
reserve = sorted(list(filter(lambda x : x not in spare_stolen, reserve)))
#lost만큼 for문 돌려주기
#여벌을 못빌리면 n = n - 1 해주기
for i in lost:
# (학생 번호 - 1) 이 reserve에 있으면 reserve에서 (학생번호 - 1) 제거
if (i-1) in reserve:
reserve.remove(i-1)
# (학생 번호 + 1) 이 reserve에 있으면 reserve에서 (학생번호 + 1) 제거
elif (i+1) in reserve:
reserve.remove(i+1)
# 위에 두 조건 경우(if, elif)는 여별을 빌렸으므로 n에서 -1 하지 않아도되지만
# else의 경우는 빌리지 못했으므로 n에서 -1을 해야한다
else:
n -= 1
return n
출처: https://1ets-just-do-it.tistory.com/40 [파이썬은 신이야🔥🔥🔥:티스토리]
풀이 해석
- set을 통해 겹치는 수를 찾은 후 리스트의 filter를 통해 겹치는 부분을 lost와 reserve에서 각각 제거한 후 for문을 이용하였다
배울 점
- set 함수의 이용
- filter와 lambda 함수를 이용한 정렬
댓글남기기