Development

[프로그래머스] 체육복 본문

코딩테스트/Python

[프로그래머스] 체육복

yo~og 2021. 9. 4. 17:41
반응형

내 코드

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