본문 바로가기

Python/Python 문제

Python 문제 74

문제 설명

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 조건
  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
입출력 예answersreturn
[1,2,3,4,5] [1]
[1,3,2,4,2] [1,2,3]
입출력 예 설명

입출력 예 #1

  • 수포자 1은 모든 문제를 맞혔습니다.
  • 수포자 2는 모든 문제를 틀렸습니다.
  • 수포자 3은 모든 문제를 틀렸습니다.

따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.

입출력 예 #2

  • 모든 사람이 2문제씩을 맞췄습니다.

 

답안

def solution(answers):
    answer = []
    p1 = [1,2,3,4,5]
    p2 = [2,1,2,3,2,4,2,5]
    p3 = [3,3,1,1,2,2,4,4,5,5]
    scores = [0, 0, 0]

    for idx, ans in enumerate(answers):

        if ans == p1[idx % len(p1)]:
            scores[0] += 1

        if ans == p2[idx % len(p2)]:
            scores[1] += 1

        if ans == p3[idx % len(p3)]:
            scores[2] += 1

    for idx, x in enumerate(scores):

        if scores[idx] == max(scores):
            answer.append(idx + 1)

    return answer

 

1. p1, p2, p3의 리스트 값이 길이가 각각 다른데 어떻게 answer 길이만큼만 값을 비교 해볼 수 있을까?

if ans == p1[idx % len(p1)]:

idx % len(p1) 나머지 값을 인덱스 값으로 넣으므로써 리스트가 answer 길이만큼 돌게 했다.

 

2. 문제를 많이 맞춘 사람을 출력 또 만약 맞춘 개수가 같다면 오름차순으로 어떻게?

if scores[idx] == max(scores):
            answer.append(idx + 1)

max를 이용해 가장많이 맞춘값과 비교해서 찾아내고 순차적으로 answer에 넣으니깐 오름차순으로 된다.

'Python > Python 문제' 카테고리의 다른 글

Python 문제 76  (0) 2022.03.16
Python 문제 75  (0) 2022.03.15
Python 문제 73  (0) 2022.03.11
Python 문제 72  (0) 2022.03.08
Python 문제 71  (0) 2022.03.04