문제

https://programmers.co.kr/learn/courses/30/lessons/42840
고민 🧐
- 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 순서로 문제를 찍으니깐 미리 최대 10,000문제를 만들어서 비교하면 어떤가?
코드 순서 🤔
- 1번, 2번, 3번의 10000문제 기준으로 답안지를 미리 만들자
- 정확히 10000문제를 하는 것 보다 2의 12승을 하는 것이 빠를꺼 같아서 아래와 같이 해봤습니다.
one_case = [1, 2, 3, 4, 5]
two_case = [2, 1, 2, 3, 2, 4, 2, 5]
three_case = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
for _ in range(12):
one_case += one_case
two_case += two_case
three_case += three_case
- 그 다음 답안지와 비교하여 몇개 맞았는지 체크하자
for num, test in enumerate(answers):
if one_case[num] == test:
one += 1
if two_case[num] == test:
two += 1
if three_case[num] == test:
three += 1
전체 코드 😀
def solution(answers):
one, two, three = 0, 0, 0
one_case = [1, 2, 3, 4, 5]
two_case = [2, 1, 2, 3, 2, 4, 2, 5]
three_case = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
for _ in range(12):
one_case += one_case
two_case += two_case
three_case += three_case
for num, test in enumerate(answers):
if one_case[num] == test:
one += 1
if two_case[num] == test:
two += 1
if three_case[num] == test:
three += 1
correct = max(one, two, three)
answer = []
if correct == one:
answer.append(1)
if correct == two:
answer.append(2)
if correct == three:
answer.append(3)
return answer
다른 사람 풀이
- 문제 풀이 이후 다른 사람 풀이 중 감동적이라 공부하기 위해 적어봅니다.
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