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

나의 풀이

def solution(n, lost, reserve):
    a = [1] * n
    for i in lost:
        a[i - 1] -= 1
    for i in reserve:
        a[i - 1] += 1
    for i in range(n):
        if a[i] == 0:
            if i > 0 and a[i - 1] == 2:
                a[i - 1] -= 1
                a[i] += 1
            elif i < n - 1 and a[i + 1] == 2:
                a[i + 1] -= 1
                a[i] += 1
            else:
                continue
    return n - a.count(0)
  • 값이 1, 사이즈가 n인 리스트를 생성해준다.
  • 체육복을 잃어버린 학생의 인덱스는 -1을, 여벌을 가지고 있는 학생의 인덱스는 +1 을 해준다.
  • 전체 학생 중에서 만약 체육복이 없는 학생이 있다면, 해당 학생이 첫번째 학생이 아니면서 이전의 학생이 여벌을 가지고 있다면, 빌려받는다. 아니면 마지막 학생이 아니면서, 다음 학생이 여벌을 가지고 있다면, 빌려받는다. 둘다 아니라면 빌려받을 수 있는 학생이 없기 때문에 스킵한다.
  • 전체 학생 - 값이 0(빌려받지 못한 학생) 수 를 계산하여 반환한다.

느낀점

처음에 테스트코드의 답은 계속 맞았으나 실패가 자꾸 떴다. 나중에 if문에서 인덱스를 저렇게 수정하고 나니 통과하였다.

0개의 댓글