본문 바로가기
알고리즘/백준 solved.ac PS

[백준][solved.ac][Silver 5][Python] 15702번 : 중간고사 채점

by 빛밤하늘 2021. 5. 5.
반응형

밑의 링크는 백준에서의 문제 링크입니다.

 

15702번: 중간고사 채점

이번 중간고사에는 총 N문제가 나왔고, 응시한 사람의 수는 M명이다. 각 문제의 배점과 각 사람의 결과가 주어졌을 때, 가장 높은 점수를 획득한 사람을 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# 첫째 줄에 문제의 개수 N, 응시자의 수 M을 입력합니다.
# 1 <= N <= 100
# 1 <= M <= 100
N, M = map(int, input().split(' '))

# 둘째 줄에 문제의 배점을 1번 문제부터 N번 문제까지 공백으로 구분해 입력합니다.
# 각 문제의 배점은 100보다 작거나 같은 자연수입니다.
allot_points = list(map(int, input().split(' ')))

# 응시자들의 정보를 저장할 리스트 변수를 선언합니다.
examiners = []

# 응시자의 수 M만큼 반복해봅니다.
for examiner_index in range(M):
    # 응시자의 정보인 응시자의 수험 번호, 시험 문제의 채점 결과를 입력합니다.
    # 수험 번호는 100,000보다 작거나 같은 자연수입니다.
    # 시험 문제의 채점 결과는 'O', 'X' 중 하나입니다.
    examiner_info = input().split(' ')

    # 수험 번호는 정수형으로 변환해줍니다.
    examiner_info[0] = int(examiner_info[0])

    # 이번 응시자의 점수를 저장하는 변수를 선언합니다.
    examiner_score = 0

    # 문제의 개수 N만큼 반복해봅니다.
    for index in range(N):
        # 응시자가 이번 문제를 맞춘 경우
        if examiner_info[index+1] == 'O':
            # 해당 문제의 배점을 examiner_score에 더해줍니다.
            examiner_score += allot_points[index]

    # 이번 응시자의 정보 리스트 변수 맨 뒤에 응시자의 점수를 넣어줍니다.
    examiner_info.append(examiner_score)

    # 이번 응시자의 정보 리스트 값을 examiners에 넣어줍니다.
    examiners.append(examiner_info)

# 첫 번째로 응시자들의 점수를 기준으로 내림차순,
# 점수가 같은 응시자가 있다면 두 번째로 응시자들의 수험 번호를 기준으로 오름차순합니다.
examiners.sort(key=lambda examiner: (-examiner[-1], examiner[0]))

# 맨 앞에 있는 응시자의 수험 번호와 점수를 공백으로 구분해 출력합니다.
print(examiners[0][0], examiners[0][-1])

결과

 

첫 번째로 제출했을 때는 응시자의 수험 번호를 정수형으로 변환해주는

examiner_info[0] = int(examiner_info[0]) 코드를 적지 않아 문자열 형태의 숫자로 정렬을 하게 되는 바람에

틀렸습니다 결과가 나왔습니다.

 

두세 번째 제출을 할 때는 갑자기 다시 제출해주세요 문구가 뜨길래

한 번 더 제출 버튼을 눌렀더니 위와 같이 제출 결과가 두 번 떴습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글