728x90
320x100
첫 도전 ...
def solution(n, lost, reserve):
answer = n - len(lost)
for i in range(len(lost)):
if n == lost[i]: # 마지막 번호일경우
if lost[i-1] in reserve :
answer += 1
reserve.remove(lost[i]-1)
elif lost[i] == 1 : # 첫번째 번호일경우
if lost[i+1] in reserve :
answer += 1
reserve.remove(lost[i]+1)
else :
if lost[i]-1 in reserve:
answer += 1
reserve.remove(lost[i]-1)
elif lost[i]+1 in reserve:
answer += 1
reserve.remove(lost[i]+1)
return answer
코드실행하면 3개의 테스트 케이스에는 통과 하나

정확성이 43.3점이라는 아예 틀렸다고 무방한 점수로 통과가 안됐음......
근데 다른 분들 풀이를 보니 내가 문제에서 놓친 부분이 있었다.
- 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.
바로 이부분이였는데 그래서 체육복이 여벌인 리스트와 체육복이 도난당한 리스트에 중복된 학생이 있을 수 있다는 것.
그래서 그걸 걸러내야 함.
그래도 잘 안풀려서 다른 분들의 풀이를 가져왔다.
def solution(n, lost, reserve):
# 정렬
lost.sort()
reserve.sort()
# 여벌 체육복을 가져온 학생도 도난당했을 수 있기 때문에 실질적으로 빌려줄 수 있는 학생만 걸러줌
for i in reserve[:]:
if i in lost:
reserve.remove(i)
lost.remove(i)
print(reserve, 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)
- for문에서 reserve[:] 과 reserve[] 채점 결과가 달라 그 이유를 몰랐는데 출력되는 것에서는 똑같은 것이 출력되지만 reserve[:]는 배열을 복사해서 그 기존의 배열을 유지한다고 생각하면 된다. for문 안에 remove()로 배열의 특정 값을 지우기 때문에 제대로 된 값이 안나올 수 있어서 [:]을 써서 배열을 복사하여 사용해야만 한다.
- 초반에 정렬을 꼭 해주어야 하는데 정렬을 해주지 않으면 값이 제대로 나오지 않는 것을 확인함.
728x90
320x100
'💻 하나씩 차곡차곡 > 프로그래머스 (Python)' 카테고리의 다른 글
[프로그래머스/Lv2/Python] 구명보트 (0) | 2024.01.22 |
---|---|
[프로그래머스/Python] [PCCP 모의고사 #1] 1번 - 외톨이 알파벳 (0) | 2024.01.18 |
[프로그래머스/Lv.2/Python] 올바른 괄호 (0) | 2024.01.16 |
[프로그래머스/Lv.1/Python] 기능개발 (0) | 2024.01.15 |
[프로그래머스/Lv.1/Python] 같은 숫자는 싫어 (0) | 2024.01.12 |
뚜루리님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.