강의로 돌아가기
이준형

12번만 틀리는 이유가 궁금합니다.

다른 케이스를 제외하고 12번만 틀리는 것으로 나오는데요,

다른 분들이 반례로 말씀하신 '이미 체육복 잃어버린 학생은 빌려줄 수 없다'라는 것에도 해당하지는 않는 것 같습니다!

혹시 다른 어떤 이유로 12번만 틀리는 것인지 알 수 있을까요?

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
def solution(n, lost, reserve):
    answer = 0

    # n명의 학생 : 체육복 1개씩 있음
    students = [1 for x in range(n)]

    # lost일 경우 체육복 1개 차감
    for stud_id in lost:
        students[stud_id - 1] -= 1  # ----> (stud_id - 1)인 이유는 인덱스이기 때문에

    # reserve일 경우 체육복 1개 추가
    for stud_id in reserve:
        students[stud_id - 1] += 1  # ----> (stud_id - 1)인 이유는 인덱스이기 때문에

    # 앞번호의 학생부터 체육복 0개일 경우 주변 학생으로부터 가져옴
    for i in range(len(students)):
        if students[i] == 0:
            try:
                if students[i - 1] == 2:
                    students[i] += 1
                    students[i - 1] -= 1
                elif students[i + 1] == 2:
                    students[i] += 1
                    students[i + 1] -= 1
            except IndexError:
                continue

    # 체육복을 1개 이상 가지고 있는 학생의 수
    cnt = 0
    for stud in students:
        if stud >= 1:
            cnt += 1

    answer = cnt

    return answer
1 개의 답변
낙방여우

음.. 대괄호안의 음의 정수는 그 절대값이 리스트의 길이보다 작다면 에러를 일으키는 것이 아닌 뒤에서부터 숫자를 센 값이 나옵니다. 예를 들어 list = [1,2,3,4,5] 라고 주어졌을 때 list[-1]은 에러를 일으키는 것이 아닌 5를 반환합니다.

반례입니다.
입력값 〉 5, [1], [5]
기댓값 〉 4

  • 이준형

    아...!!

    이준형―2023.07.11 15:35
  • 이준형

    리스트 []에서 음수 주어졌을 때 인덱스가 없을 것이라 생각한 부분에서 오류가 발생한 것이군요..! 감사합니다!!! :)

    이준형―2023.07.11 15:35
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.