[프로그래머스] 탐욕법(Greedy) - 체육복 (Level 1)

체육복


풀이과정

  1. 여벌의 체육복을 가진 학생이 체육복을 도난당했을 때는 본인이 사용한다.
  2. 번호순대로 빌릴 수 있는 체육복이 있는 학생에게 체육복을 빌려준다.

Python Code

def solution(n, lost, reserve):
    answer = n - len(lost)
    
    for i in reserve[:]:    #여벌의 체육복을 가진 학생이 도난당했을 때는 본인이 사용
        if i in lost:
            lost.remove(i)
            reserve.remove(i)
            answer += 1
            
    for i in lost[:]:   #빌릴 수 있는 체육복이 있는 학생들에게 순서대로 빌려줌
        if i-1 in reserve:
            lost.remove(i)
            reserve.remove(i-1)
            answer += 1
        elif i+1 in reserve:
            lost.remove(i)
            reserve.remove(i+1)
            answer += 1
            
    return answer

오류와 해결 + 새로 알게 된 점

for문을 돌리면서 리스트의 원소를 remove하니 for문이 끝까지 돌지 않아 오류가 났다. 원본 리스트의 사본을 만들어 for문을 돌리니 해결되었다. 리스트[:]를 통해 간단하게 리스트의 사본을 만들 수 있다.

for i in lst[:]	#lst의 사본을 만들어 for문을 돌림
	if 조건:
		lst.remove(i)	#원본인 lst에서 원소 제거

다른 사람의 풀이

나는 처음에 빌릴 수 있는 체육복이 1개뿐인 학생과 2개인 학생의 경우를 나눠서 문제를 풀었는데 다른 사람의 풀이를 보니 그냥 처음부터 순서대로 체육복을 빌려줘도 답이 나왔다. 그래서 그렇게 수정했다. 또 나는 체육복을 빌려줄 때마다 answer에 1을 더해 답을 구했는데, 그냥 마지막에 answer = n-len(lost)로 답을 구하는 방법이 있었다.

좋은 웹페이지 즐겨찾기