728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42862#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제는 여기서 확인할 수 있다.
def solution(n, lost, reserve):
lost.sort()
reserve.sort()
answer = n - len(lost)
for i in range(len(lost)):
for l in lost:
if l in reserve:
answer+=1
lost.remove(l)
reserve.remove(l)
break
for l in lost:
for r in reserve:
if r == l-1 or r == l+1:
answer += 1
reserve.remove(r)
break
return answer
그리디 문제이다. 먼저 도난당한 학생들 중 여벌의 체육복을 가져온 학생들을 제외시킨 후, 나머지 lost 리스트를 돌면서 reserve에 사이즈가 맞는 체육복이 있을 경우 answer을 1 증가시키고 지워주는 식으로 코드를 구상하였다.
처음에 헤맸던 게 이부분이다.
이 제한사항을 읽지 못하고,, 여벌 체육복을 가져온 학생이 도난당했을 경우를 생각하지 못했다가, 나중에 추가해주었다.
또 전에 range()를 이용해 for문을 진행시키면, remove()를 써도 i값이 배열이 바뀐 것을 인지하지 못한다고 했는데,
range()를 쓰지 않을 경우에는 바뀐 것을 인지해 i값 또한 업데이트된다는 것을 재고하였다.
(이전에는 크레인 인형 뽑기 게임 문제에서 이를 알 수 있었다.)
그래서 5번줄을 i in lost로 쓸 경우 중간에 값이 지워진 후 접근하지 못하는 곳이 생겨 예외처리에서 막히는 부분이 생긴다.
728x90
'프로그래머스' 카테고리의 다른 글
[Lv.1][python] 완주하지 못한 선수 (0) | 2022.08.07 |
---|---|
[Lv.1][python] 같은 숫자는 싫어 (0) | 2022.08.07 |
[Lv.1][python] 크레인 인형 뽑기 게임 (0) | 2022.08.07 |
[Lv.1][python]신고 결과 받기 (0) | 2022.08.02 |
오픈채팅방 (0) | 2022.07.01 |