본문 바로가기
코딩테스트 연습

문제 Programmers 체육복 (Level 1)

by 동배_ 2021. 8. 2.

문제 Programmers 체육복 (Level 1)

https://programmers.co.kr/learn/courses/30/lessons/42862?language=python3

 

문제 해석 및 풀이 방법

1. 체육복은 바로 옆 사람에게 줄 수 있다. reserve값 +- 1 == lost 값과 같을때만 줄 수 있다.

2. 또 자기자신에게 줄 수 있다. 자기 자신도 도둑이 훔쳐갈 수 있기 때문에. reserve == lost 일때

3. 그래서 결론적으로 lost 내의 값을 지우고 그 후 수업을 듣는 학생과 뺴려고 했다. n-len(lost)(결과)

내가 작성한 소스코드

def solution(n, lost, reserve):
    _lost = set(lost) -set(reserve)
    _reserve = set(reserve) - set(lost)
    for i in _reserve:
        if i-1 in _lost:
            _lost.remove(i-1)
        elif i+1 in _lost:
            _lost.remove(i+1)
            
    return n-len(_lost)

결론

솔직히 이 문제를 보자말자 바로 느낌이 와서 정말 30초만에 코드를 짰었다. 그런데 계속 2~3개가 실패가 나는 것이였다. 처음 코드에는

중복제거를 하지 않고

for 문안에 if i in lost: 명령어를 추가해서 했었다. 그런데 오류가 났고 그 이유를 알지못해 Level 1임에도 불구하고 어느정도 고민햇던 것 같다.

그래서 고민하다 나온것이 i in lost문을 제외하고 for문 밖에서 중복일 경우 (여유분이 있는 자신이 도둑맞았을 경우)를 먼저 해결해준 후 그것을 제외한 명령문을 작성하니 모든 테스트 케이스가 통과 됐다.

다른 코드들을 보아하니 대체로 나 처럼했던것 같다. 오히려 Level 1을 이렇게 시간을 소요해서 내 실력에 한탄했다.

댓글