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

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr

def solution(n, lost, reserve):
    answer = 0

    # 1부터 사용하기 위해 n + 1
    student = [0] * (n + 1)

    # 도난당한 경우 -1
    for l in lost:
        student[l] -= 1
        
    # 여벌 있는 경우 +1
    for r in reserve:
        student[r] += 1

    # 1부터 n까지
    for i in range(1, n+1):
        # 도난 당한 학생인 경우
        if (student[i] == -1):
            # 바로 앞번호 학생이 줄 수 있는 경우
            if ((i != 1) and student[i-1] == 1):
                # 현재 학생은 체육복 받았으므로 +1
                student[i] += 1
                # 바로 앞번호 학생은 체육복을 빌려줬으므로 -1
                student[i-1] -= 1
            # 바로 뒷번호 학생이 줄 수 있는 경우
            elif ((i != n) and student[i+1] == 1):
                # 현재 학생은 체육복 받았으므로 +1
                student[i] += 1
                # 바로 뒷번호 학생은 체육복을 빌려줬으므로 -1
                student[i+1] -= 1

    # -1이 아닌 0, 1인 경우는 체육수업을 들을 수 있으므로 +1
    for i in range(1, n+1):
        if (student[i] != -1):
            answer += 1

    return answer

+ Recent posts