Posts 모의고사 [Python]
Post
Cancel

모의고사 [Python]

1. 모의고사


URL : https://programmers.co.kr/learn/courses/30/lessons/42840

1.1 문제 설명

  • 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.


1.2 제한 조건

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


1.3 Solution

1
2
3
4
5
6
7
8
9
10
11
12
def solution(answers):
    pattern = [[1,2,3,4,5] * 2000, [2,1,2,3,2,4,2,5] * 1250 , [3,3,1,1,2,2,4,4,5,5] * 1000]
    scorearrays = [0,0,0]
    result =[]
    for idx, answer in enumerate(answers):
        for i in range(0, len(pattern)):
            if answer == pattern[i][idx]:
                scorearrays[i] +=1
    for idx, s in enumerate(scorearrays):
        if s == max(scorearrays):
            result.append(idx+1)
    return result
1
2
answers = [1,2,3,4,5]
solution(answers)
1
[1]


1
2
answers = [1,3,2,4,2]
solution(answers)
1
[1, 2, 3]
  • 처음 제출본 - 시험은 최대 1만 문제이므로, 패턴을 1만개로 만들어서 제출해봄
  • 1번 수포자 : 1 2 3 4 5 의 패턴
  • 2번 수포자 : 2 1 2 3 2 4 2 5 의 패턴
  • 3번 수포자 : 3 3 1 1 2 2 4 4 5 5 의 패턴

  • answer의 index와 패턴의 index를 비교하여 맞으면 scorearrays에 +1를 하게 함
  • 끝난뒤 max값을 찾아서 index를 리턴시킴(0,1,2이므로 +1을 하여 1,2,3으로 만들어줌)


1
2
3
4
5
6
7
8
9
10
11
12
def solution(answers):
    pattern = [[1,2,3,4,5], [2,1,2,3,2,4,2,5], [3,3,1,1,2,2,4,4,5,5]]
    scorearrays = [0,0,0]
    result =[]
    for idx, answer in enumerate(answers):
        for i in range(0, len(pattern)):
            if answer == pattern[i][idx%len(pattern[i])]:
                scorearrays[i] +=1
    for idx, s in enumerate(scorearrays):
        if s == max(scorearrays):
            result.append(idx+1)
    return result
1
2
answers = [1,2,3,4,5]
solution(answers)
1
[1]


1
2
answers = [1,3,2,4,2]
solution(answers)
1
[1, 2, 3]
  • 추후 수정본, 패턴을 1만개로 만들지 않고, index / len(pattern)의 나머지를 index로 잡으면 되는것을 알게됨
  • 위의 패턴에서 1만개를 강제로 만들지 않고 index / len(pattern)의 나머지 값을 index로 잡고 위와 똑같이 함(속도가 더 빠름)
This post is licensed under CC BY 4.0 by the author.