Algorithm/Greedy

[프로그래머스 Lv.1] 체육복

킹우현 2023. 9. 29. 18:47

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(n, lost, reserve):
    # 2 <= n <= 30
    # 1 <= len(lost) <= n, 중복 X
    # 1 <= len(reserve) <= n, 중복 X
    
    # 여벌 체육복이 있는 학생만 다른 학생에게 빌려줄 수 있음
    # 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있음
    
    status = [1]*(n+1)
    
    for r in reserve:
        status[r] += 1
        
    for l in lost:
        status[l] -= 1
        
    for i in range(n+1):
        if status[i] == 2:
            if i-1 >= 0 and status[i-1] == 0:
                status[i] -= 1
                status[i-1] += 1
            elif i+1 < n+1 and status[i+1] == 0:
                status[i] -= 1
                status[i+1] += 1
    
    status = status[1:]
    
    return sum([1 for x in status if x != 0 ])

이번 문제는 여벌 체육복을 가진 학생들이 다른 학생들에게 양옆으로만 빌려줄수 있다는 가정하에, 도난당한 학생들에게 체육복을 빌려줘서 체육수업을 들을 수 있는 학생의 최댓값을 구하는 문제이다.

 

문제의 조건을 최대한 꼼꼼히 읽고 주석에 남겨놓으면서 히든 케이스나 예외를 방지하려고 노력하였던 문제이다 :)

'Algorithm > Greedy' 카테고리의 다른 글

[백준 1049번] 기타줄  (1) 2023.10.07
[백준 23889번] 돌 굴러가유  (0) 2023.09.30
[백준 17392번] 우울한 방학  (0) 2023.09.29
[백준 13305번] 주유소  (0) 2023.02.24
[백준 3109번] 빵집  (0) 2023.02.09