📌문제 설명
📌제한 사항
- 시험은 최대 10,000 문제로 구성되어있습니다.
- 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
- 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
📌 Solution
이번 문제는 완전탐색으로 처음부터 다같이 계속 돌면 되는 문제인데 다만 고려해야할 점이 1,2,3번 수포자가 찍는 패턴의 길이가 다 다르다는 점이다. 이것의 순환주기마다 다시 돌려줄 필요가 있다. -> 이렇게 안해주면 런타임 에러가 걸린다.
def solution(answers):
answer = []
num1=[1,2,3,4,5]
num2=[2,1,2,3,2,4,2,5]
num3=[3,3,1,1,2,2,4,4,5,5]
maxi=0
cnt_1=0
cnt_2=0
cnt_3=0
index1=0
index2=0
index3=0
for i in range(len(answers)):
if index1>=len(num1):
index1=0
if index2>=len(num2):
index2=0
if index3>=len(num3):
index3=0
if num1[index1]==answers[i]:
cnt_1+=1
if num2[index2]==answers[i]:
cnt_2+=1
if num3[index3]==answers[i]:
cnt_3+=1
index1+=1
index2+=1
index3+=1
maxi=max(cnt_1, cnt_2, cnt_3)
if maxi==cnt_1:
answer.append(1)
if maxi==cnt_2:
answer.append(2)
if maxi==cnt_3:
answer.append(3)
return answer
위와 같은 코드로 순환주기를 맞춰주긴 하였지만 다른 분들의 풀이를 보니 %연산을 이용하여서 순환주기를 맞춰주는 작업을 하였다는 것을 알 수 있었다.
def solution(answers):
answer = []
num1=[1,2,3,4,5]
num2=[2,1,2,3,2,4,2,5]
num3=[3,3,1,1,2,2,4,4,5,5]
maxi=0
cnt_1=0
cnt_2=0
cnt_3=0
for i in range(len(answers)):
if num1[i%len(num1)]==answers[i]:
cnt_1+=1
if num2[i%len(num2)]==answers[i]:
cnt_2+=1
if num3[i%len(num3)]==answers[i]:
cnt_3+=1
maxi=max(cnt_1, cnt_2, cnt_3)
if maxi==cnt_1:
answer.append(1)
if maxi==cnt_2:
answer.append(2)
if maxi==cnt_3:
answer.append(3)
return answer
다음이 2번째 버전이다. 확실히 짧아지고 가독성이 좋아진 부분이 있는데 다음부터 문제들 중 순환주기에 따라 문제를 해결해야할 때가 있을때 %연산을 잘 활용해봐야겠다.
✨ 문제 해결하며 알게 된 점