[프로그래머스] 탐욕법 - 체육복

4418 단어 algorithmalgorithm
def solution(n, lost, reserve):
    #무조건 체육복을 가지고 있는 학생 수 
    answer = n-len(lost)
    lost.sort()
    reserve.sort()
    
    for i in range(n+1):
        if i in lost and i in reserve:
            answer+=1
            lost.remove(i)
            reserve.remove(i)
    
    #다른 학생에게 빌려줌
    for i in range(n+1):
        if i in lost and i-1 in reserve:
            answer+=1
            reserve.remove(i-1)
        elif i in lost and i+1 in reserve:
            answer+=1
            reserve.remove(i+1)
    
    return answer

O(n^2)였던 코드를 수정했다.

for i,l in enumerate(lost):
	for idx, r in enumerate(reserve):
    	#~~~~~

이런 식으로 for문을 중첩해서 풀었다면,
이번에는 n이 주어졌다는 것을 이용해서 하나의 for문을 이용해서 속해있는지를 확인한 후 answer+=1을 해주었다.

  • 기본 아이디어
  1. answer = n-len(lost)
  2. lost와 reserve 둘 다 속해있는 요소 제거해주기, answer+=1
  3. 옷을 빌려줄 때, 작은 수(i-1) 부터 빌려주도록 구현

좋은 웹페이지 즐겨찾기