프로그래머스 · PCCE 기출문제 6번 가채점
문제
성적을 문의하려는 학생들의 번호 리스트 numbers, 그 학생들이 가채점한 점수 리스트 our_score, 실제 성적이 번호 순서로 담긴 score_list가 주어진다. 가채점한 점수가 실제 성적과 같으면 "Same", 다르면 "Different"를 순서대로 리스트에 담아 반환하는 solution 함수가 올바르게 동작하도록 한 줄을 고친다. numbers의 길이는 1 이상 10 이하이고 중복이 없다.
풀이
고쳐야 할 곳은 4번째 줄의 비교식이다. 처음 코드를 실행하면 IndexError: list index out of range가 나고 테스트 2개 중 0개가 성공했다.
# 기존
if numbers[our_score[i]] == score_list[i]:
# 변경
if our_score[i] == score_list[numbers[i]-1]:numbers는 문의하려는 학생들의 번호가 담긴 리스트다.our_score는 문의하려는 학생들이 가채점한 점수 리스트다.score_list는 전체 학생의 성적을 번호순으로 담은 리스트다.
기존 식은 가채점 점수 our_score[i]로 numbers를 인덱싱한다. 예를 들어 numbers = [3, 4], our_score = [85, 93]이고 i가 0이면 numbers[85]를 읽게 되는데, numbers는 길이 2인 리스트라서 범위를 벗어나 오류가 난다.
올바른 비교는 학생 번호로 실제 성적을 찾아 가채점 점수와 맞대어 보는 것이다. 번호는 1부터 시작하고 리스트 인덱스는 0부터 시작하므로 score_list[numbers[i]-1]로 읽는다.
def solution(numbers, our_score, score_list):
answer = []
for i in range(len(numbers)):
if our_score[i] == score_list[numbers[i]-1]:
answer.append("Same")
else:
answer.append("Different")
return answer