PS (Problem Solving)/Programmers

[프로그래머스] 체육복

캐럿노트 2022. 8. 12. 19:00

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42862

 

프로그래머스

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

programmers.co.kr

 

- 주어진 조건은 순서대로 코드를 작성했지만 조금 더 간단하게 만들 필요가 있다고 생각한다.

def solution(n, lost, reserve):
    bucket = [1] * (n + 1)      # 체육복이 1개씩 있다고 가정한다.
    bucket[0] = 0               # 번호는 1번부터 시작한다.

    #초기 세팅
    for i in lost:
        bucket[i] -= 1          # 체육복이 없는 사람은 빼준다.
    for i in reserve:
        bucket[i] += 1          # 여벌 체육복이 있는 사람은 더해준다.

    # 체육복 빌리기
    for i in range(1, n):
        if bucket[i] != 0:
            continue
        if bucket[i - 1] >= 2:  # 체육복이 2개 이상일 경우에만 빌릴 수 있다.
            bucket[i - 1] -= 1
            bucket[i] += 1
        elif i + 1 <= n and bucket[i + 1] >= 2:
            bucket[i + 1] -= 1
            bucket[i] += 1

    # 체육복 입은 사람 수 count
    answer = 0
    for student in bucket:
        if student >= 1:
            answer += 1

    return answer