자기계발
프로그래머스
PCCE 6번 · 가채점

프로그래머스 · 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

출처