• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

min 값을 점수[0]으로 초기화 했을 때 테스트케이스 5번 exit_code1이었나 오류가 나는 이유가 뭔가요?

22.11.04 23:30 작성 조회수 187

0

import sys
sys.stdin = open('input.txt', 'rt')

N = int(input())
score = list(map(int, input().split()))
ave = int((sum(score) / N) + 0.5)
min = score[0]
for i,v in enumerate(score):
    value = abs(v - ave)
    #print(value)
    if value < min:
        min = value
        idx = i
        tmp_score = v
        
    elif value == min:
        if v > tmp_score:
            min = value
            idx = i
            tmp_score = v
print(ave, idx + 1)

작성한 코드입니다.

in5 는

5

1 2 3 4 5 로 입력을 받는데 해당 케이스 통과를 못하네요.

비쥬얼스튜디오에서 돌려보니 tmp_score가 정의되지 않았다고 뜨네요.

min값을 초기화 할 때 리스트 0번쨰 인덱스로도 초기화 한다고 하셨는데 뭐가 문제인건가요?

 

 

답변 1

답변을 작성해보세요.

0

안녕하세요^^

min값을 리스트의 0번 인덱스 값으로 초기화 할 때는 최솟값을 리스트의 자료값들 중에서 찾을때 입니다.

대표값 문제는 score 리스트에 있는 값들 중에서 최솟값을 찾는게 아니라 평균과 리스트값의 차들 중에서 찾는 것이기 때문에 0번 인덱스의 값으로 초기화하면 답이 안나올 수 있습니다.

하지만 위에 코드의 진짜 문제는 v값이 2일 때

elif value == min:
        if v > tmp_score:

위에 조건이 value=1, min =1 로 위조건이 참이 되어 if v > tmp_score: 조건을 실행할 때 tmp_score값이 없는 값으로 존재하기 때문에 에러가 나는 것입니다. 그래서

import sys
sys.stdin = open('input.txt', 'rt')

N = int(input())
score = list(map(int, input().split()))
ave = int((sum(score) / N) + 0.5)
min = score[0]
tmp_score = 0 #값을 초기화만 해줘도 5번 인풋 답은 나올겁니다.
for i,v in enumerate(score):
    value = abs(v - ave)
    #print(value)
    if value < min:
        min = value
        idx = i
        tmp_score = v
        
    elif value == min:
        if v > tmp_score:
            min = value
            idx = i
            tmp_score = v
print(ave, idx + 1)

 

min값을 2147000000 처럼 큰 값으로 하면 왜 아무 문제없이 나오는지도 연구해보세요.