모의고사

문제 설명

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 하는 값을 오름차순 정렬해주세요

입출력 예

answers return
[1,2,3,4,5] [1]
[1,3,2,4,2] [1,2,3]

입출력 예 설명

입출력 예 # 1

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

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

입출력 예 # 2

  • 수포자 1은 [1,4]번 문제를 맞혔습니다.
  • 수포자 2는 다섯 번째 문제를 맞혔습니다.

나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def solution(answer):
dic = {1: 0, 2: 0, 3: 0}
math1 = [1,2,3,4,5] * 8
math2 = [2,1,2,3,2,4,2,5] * 5
math3 = [3,3,1,1,2,2,4,4,5,5] * 4

mul = 2
while len(math1) < len(answer):
math1 = math1 * mul
math2 = math2 * mul
math3 = math3 * mul
mul += 1

for i in range(len(answer)):
if math1[i] == answer[i]:
dic[1] += 1
if math2[i] == answer[i]:
dic[2] += 1
if math3[i] == answer[i]:
dic[3] += 1

max_num = max(dic.values())

ls = []
for i in range(1, 4):
if dic.get(i) > (max_num-1):
ls.append(i)


return sorted(ls)

다른 사람의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def solution(answers):
pattern1 = [1,2,3,4,5]
pattern2 = [2,1,2,3,2,4,2,5]
pattern3 = [3,3,1,1,2,2,4,4,5,5]
score = [0,0,0]
result = []

for idx, answer in enumerate(answers):
if answer == pattern1[idx%len(pattern1)]:
score[0] += 1
if answer == pattern2[idx%len(pattern2)]:
score[1] += 1
if answer == pattern3[idx%len(pattern3)]:
score[2] += 1

for idx, s in enumerate(score):
if s == max(score):
result.append(idx+1)

return result

한계점

  • %를 이용한 몫 계산을 생각하지 못했다.
  • 1 % 5 = 1, 5 % 5 = 0, 6 % 5 = 1
  • 마지막 결과가 ascending 이면 되기 때문에 range와 for을 이용해 앞 index 부터 접근하는 경우 sorted 함수를 안써도 됐다.
Share