Notice
Recent Posts
Recent Comments
Link
Development
[프로그래머스] 체육복 본문
반응형
내 코드
def solution(n, lost, reserve):
a = set(lost) & set(reserve)
lost = set(lost) - a
reserve = set(reserve) - a
for i in range(1,n+1):
if i in lost:
if i-1 in reserve:
lost-={i}
reserve-={i-1}
elif i+1 in reserve:
lost-={i}
reserve-={i+1}
return n - len(lost)
먼저 lost와 reserve에서 중복되는 숫자를 빼준다.
for 문을 n+1까지 돌려서 체육복을 잃어버린 학생 집합(lost)에 i가 존재하면 i 앞, 뒤 숫자(+1,-1)가 여분 체육복이 남는 학생 집합(reserve)에 있는지 본다. 존재하면 lost에서 i를 삭제하고, reserve에서 i+1이나 i-1을 삭제한다.
전체 학생 수 에서 체육복을 잃어버린 학생들의 수를 빼주면 체육복을 가지고 있는 학생들의 수가 나온다.
다른사람 코드
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)
내 코드랑 비슷하다. 처음에 중복된 수를 뺄때 for문을 사용하였는데 사람들이 for문보다 set이 더 좋다고 한다.
처음에는 set으로 중복된 수를 거르고 list로 만들어서 for r in reserve이렇게 풀면 효율적인 코드가 될 것같다.
반응형
'코딩테스트 > Python' 카테고리의 다른 글
[프로그래머스] 큰 수 만들기 (0) | 2021.09.05 |
---|---|
[프로그래머스] 조이스틱 (0) | 2021.09.04 |
[프로그래머스] 소수 찾기 (0) | 2021.09.04 |
[프로그래머스] 가장 큰 수 (0) | 2021.09.04 |
[프로그래머스] 카펫 (0) | 2021.09.03 |
Comments