티스토리 뷰

728x90
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/42862

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr

 

 


 

 

<나의 풀이>

def solution(n, lost, reserve):
    answer = n
    lost.sort()
    remove_reserve = sorted(reserve)

    # 여벌을 도둑맞은 경우 (lost와 reserve에 같은 숫자가 있는 경우)
    for i in reserve:
        if i in lost:
            lost.remove(i)
            remove_reserve.remove(i)

    # 빌려준 경우 (옷을 빌려입은 사람은 체육복이 있으니 lost에서 제외)
    for i in remove_reserve:
        if i-1 in lost:
            lost.remove(i-1)
        elif i+1 in lost:
            lost.remove(i+1)
            
    # 전체 사람 수(answer)에서 끝까지 옷을 못 빌린 사람 수(lost)를 빼줌
    return answer-len(lost)

 

여벌의 체육복이 있어도 잃어버리면 못 빌려준다는 (lost와 reserve에 같은 숫자가 있는 경우) 걸 빼고

코드를 짜서 일부만 맞고 일부만 틀린 문제..

문제를 꼼꼼히 잘 읽자😂

 

 

 

 

<다른 사람의 풀이>

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)
    
    
# <배운점> 
# => remove 대신 not in을 사용한 점

 

728x90
반응형
댓글