문제) 체육복
코딩테스트 연습 - 체육복
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번
programmers.co.kr
- 내 풀이
- 잃어버리지 않은 경우
- 잃어버렸지만 여분 옷이 있던 경우
- 잃어버린 학생들 중 양 옆 번호에 여분 옷을 가지고 있는 경우
- 여분 옷을 가지고 있는 학생이 남은 경우 합산(중복 값은 set함수로 사라질 예정)
- → 1번과 같은 경우인데 이 코드가 없으면 정답이 X
- 잘못된 풀이 방법인 것 같다
- 5번 테스트 케이스 실패
def solution(n, lost, reserve):
lost.sort()
reserve.sort()
have=[i for i in range(1,n+1) if i not in lost]
for l in lost:
if l in reserve: #여벌 옷 가진 학생이 잃어버린 경우 여벌 옷 없는 것으로 간주
have.append(l)
reserve.remove(l)
lost.remove(l)
for ls in lost:
if ls-1 in reserve:
have.append(ls)
reserve.remove(ls-1)
elif ls+1 in reserve:
have.append(ls)
reserve.remove(ls+1)
#reserve에 남은 학생도 추가
have+=reserve
answer=len(set(have))
return answer
- 내 풀이
- 잃어버린 학생 중 맨 마지막 번호 학생이 있는 경우 코드 추가
- 통과
- 했지만 문제 오류 인듯 하다
def solution(n, lost, reserve):
lost.sort()
reserve.sort()
have=[i for i in range(1,n+1) if i not in lost]
for l in lost:
if l in reserve: #여벌 옷 가진 학생이 잃어버린 경우 여벌 옷 없는 것으로 간주
have.append(l)
reserve.remove(l)
lost.remove(l)
for ls in lost:
if ls==n:
ls=0
if ls-1 in reserve:
have.append(ls)
reserve.remove(ls-1)
continue
elif ls+1 in reserve:
have.append(ls)
reserve.remove(ls+1)
#reserve에 남은 학생도 추가
have+=reserve
answer=len(set(have))
return answer
- 다른 사람 풀이
- 잃어버리지 않고 여벌 옷 가진 경우
- 여벌 옷 없이 잃어버린 경우 → 1번 경우의 학생에게 여벌 옷 받을 수 있음
- 체육수업 참가 가능 학생 = 전체 - (잃어버린 학생 들 중 여벌 옷 받지 못한 학생)
def solution(n, lost, reserve):
lost.sort()
reserve.sort()
_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)'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] [Level 1] 소수 만들기 (0) | 2022.03.21 |
|---|---|
| [프로그래머스] [Level 1] [완전탐색] 모의고사 (0) | 2022.03.21 |
| [프로그래머스] [Level 1] 폰켓몬 (0) | 2022.03.20 |
| [프로그래머스] [Level 1] 3진법 뒤집기 (0) | 2022.03.17 |
| [프로그래머스] [Level 1] 두 개 뽑아서 더하기 (0) | 2022.03.17 |