문제 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을 이렇게 시간을 소요해서 내 실력에 한탄했다.
'코딩테스트 연습' 카테고리의 다른 글
프로그래머스 124 나라의 숫자 Level 2 (0) | 2021.08.11 |
---|---|
프로그래머스 멀쩡한 사각형 Level 2 (0) | 2021.08.07 |
프로그래머스 오픈채팅방 Level 2 (0) | 2021.08.05 |
프로그래머스 짝지어 제거하기 Level 2 (0) | 2021.08.05 |
프로그래머스 완주하지 못한 선수 Level 1 (0) | 2021.08.03 |
댓글