Published 2024. 7. 16. 19:43

유형 : 그리디

풀이 시간 : 20분? 30분

def solution(n, lost, reserve):
    answer = 0
    check = [1 for i in range(n+1)]
    for r in reserve:
        check[r] += 1
    for l in lost:
        check[l] -= 1
    for i in range(1, len(check)):
        if i == len(check)-1 and check[i] == 0:
            if check[i-1] == 2:
                check[i-1] -= 1
                check[i] += 1                
        elif check[i] == 0:
            if check[i-1] == 2:
                check[i-1] -= 1
                check[i] += 1
            elif check[i+1] == 2:
                check[i+1] -= 1
                check[i] += 1
    return n - (check.count(0))

 

check 배열에는 도난 사건 발생 후 i번째 학생의 체육복 갯수를 check[i] 에 저장.

i를 순회하며 

 1) 먼저 앞 학생에게 빌릴 수 있는지 보고

 2) 안 될 경우 뒤 학생에게 빌릴 수 있는지 체크

이 때, 마지막 학생의 경우 앞 학생의 것만 체크한다. 

 

먼저 앞을 체크하고 뒤를 체크하면 (뒤의 경우 뒤 학생에게 빌려줄 수도 있기 때문, 앞은 이미 체크 완료)

최적의 답을 찾을 수 있다. (greedy)

'프로그래머스 > Lv. 1' 카테고리의 다른 글

50. 햄버거 만들기 ★  (0) 2024.07.16
49. 숫자 짝꿍 ★ (Counter, union)  (0) 2024.07.16
47. 완주하지 못한 선수  (0) 2024.07.16
46. 대충 만든 자판 (+enumerate)  (0) 2024.07.16
45. 둘만의 암호  (0) 2024.07.16
복사했습니다!