006. 체육복
문제
내 풀이 1(오답)
def solution(n, lost, reserve):
answer = n - len(lost)
for i in lost:
for j in reserve:
if i==j:
reserve.remove(j)
lost.remove(i)
answer += 1
break
for i in lost:
for j in reserve:
if j==i-1 or j==i+1:
reserve.remove(j)
answer += 1
return answer
- 테스트 5번과 7번에서 통과되지 못함
- 질문하기에서 정렬하면 해결된다고 해서 정렬시킴
내 풀이 2(오답)
def solution(n, lost, reserve):
answer = n - len(lost)
lost.sort()
reserve.sort()
for i in lost:
for j in reserve:
if i==j:
reserve.remove(j)
lost.remove(i)
answer += 1
break
for i in lost:
for j in reserve:
if j==i-1 or j==i+1:
reserve.remove(j)
answer += 1
return answer
- 이번엔 1번, 6번, 7번 오류 불통..;;; 프로그래머스는 해당 번호 단계가 뭔지 안 알려주는 게 좀 단점인 듯 뭘 고쳐야 할 지 감이 안와요..;;ㅜㅜ
내 풀이 3(정답)
- 찾아보다가 다른 분들도 정확하게 문제를 찾아내지 못하시는 것 같아서 다른 방법으로 풀기로 했다(아마 내 생각엔
n
에 대해서 문제가 있는 듯 하다)
def solution(n, lost, reserve):
answer = n - len(lost)
for i in range(1, n+1): # 1~n까지 반복
if i in lost and i in reserve: # 여벌이 있는데 도난당한 사람
reserve.remove(i) # 제거
lost.remove(i) # 제거
answer+=1 # 수업 참여 +1
for i in range(1, n+1): # 1~n까지 반복
if i in lost: # 도난 당한 사람
if (i-1) in reserve: # 도난 당한 번호의 앞 번호가 여벌이 있을 경우
reserve.remove(i-1)
lost.remove(i)
answer+=1 # 수업 참여 +1
elif (i+1) in reserve: # 도난 당한 번호의 뒷 번호가 여벌이 있을 경우
reserve.remove(i+1)
lost.remove(i)
answer+=1 # 수업 참여 +1
return answer
가장 높은 비율의 정답 풀이
- 간결한 것에 감탄....리뷰해보면
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: # f가 도난 당했다면
_lost.remove(f) # 여벌없이 도난 당한 리스트에서 제거
elif b in _lost: # b가 도난 당했다면
_lost.remove(b) # 여벌없이 도난 당한 리스트에서 제거
return n - len(_lost) # 총 학생수에서 여벌없이 도난당한 사람 리스트 빼서 수업 참여 인원 산출
Author And Source
이 문제에 관하여(006. 체육복), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hiyee-gj/006.-체육복저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)