문제
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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
모든 사람이 2문제씩을 맞췄습니다.
방향성 힌트: 3명의 수포자들이 같은 방식으로 찍는다는 규칙을 어떻게 나타내면 좋을지 생각하기.
one_list = ["1","2","3","4","5"]
two_list = ["2","1","2","3","2","4","2","5"]
three_list = ["3","3","1","1","2","2","4","4","5","5"]
시도 이유:
틀린 이유: 문자열 리스트 보다 정수형 리스트를 사용해야 한다.
발전 방향: 정수형 리스트 사용하기.
방향성 힌트: 수포자들이 찍은 번호와 정답 배열인 answers가 동일한지 판별하는 부분 만들기.
문법 힌트:
for
문 사용. if
문 사용.nomath1 = [1,2,3,4,5]
nomath2 = [2,1,2,3,2,4,2,5]
nomath3 = [3,3,1,1,2,2,4,4,5,5]
score = [nomath1, nomath2, nomath3]
for answers == nomath1:
score += 1
print(f"수포자1은 {score} 문제를 맞혔습니다.")
for answers == nomath2:
score += 1
print(f"수포자2는 {score} 문제를 맞혔습니다.")
for answers == nomath3:
score += 1
print(f"수포자3은 {score} 문제를 맞혔습니다.")
시도 이유:
틀린 이유:
발전 방향:
1. score 리스트를 각 수포자들의 점수를 저장하는 용도로 사용하기 위해서 score=[0,0,0]
을 사용하기.
for i in range(len(answers)):
으로 바꾸기.i
는 반복문의 인덱스 변수이다. 이를 사용하여 answers 리스트의 각 요소를 확인하고, 해당 요소가 수포자들의 찍는 방식과 일치하는지 확인할 수 있다.range(len(answers))
는 0부터 answers 리스트의 길이 -1까지의 숫자 시퀀스를 생성하는 부분이다.nomath1 = [1,2,3,4,5]
nomath2 = [2,1,2,3,2,4,2,5]
nomath3 = [3,3,1,1,2,2,4,4,5,5]
score = [0,0,0]
for i in range(len(answers)):
if nomath1 == answers[i]:
score[0] += 1
if nomath2 == answers[i]:
score[1] += 1
if nomath3 == answers[i]:
score[2] += 1
winner=max(score)
시도 이유:
틀린 이유:
발전 방향:
1. if nomath1,2,3 == answers[i]:
부분을 if answers[i] == nomath1,2,3[i % len(nomath1,2,3)]:
으로 바꾸기.
answer = []
를 이용해, 최다 득점자가 여럿일 경우 올바르게 작성할 수 있도록 한다.answer = []
는 빈 리스트이다. 이를 이용해 최다 득점자가 여럿일 경우, 그들을 이 리스트에 차례대로 작성할 수 있다.def solution(answers):
nomath1 = [1,2,3,4,5]
nomath2 = [2,1,2,3,2,4,2,5]
nomath3 = [3,3,1,1,2,2,4,4,5,5]
score = [0,0,0]
for i in range(len(answers)):
if answers[i] == nomath1[i%len(nomath1)]:
score[0] += 1
if answers[i] == nomath2[i%len(nomath2)]:
score[1] += 1
if answers[i] == nomath3[i%len(nomath3)]:
score[2] += 1
winner = max(score)
answer = []
for i in range(len(score)):
if score[i] == max(score):
answer.append(i+1)
return answer
틀린 이유:
def solution(answers):
코드 이후에 들여쓰기를 올바르게 하지 않았다.if score[i] == max(score):
부분은 반복문이 실행될 때마다 매번 max 함수를 호출하게 되므로, 불필요한 계산이 생긴다. 발전 방향:
def solution(answers):
nomath1 = [1,2,3,4,5]
nomath2 = [2,1,2,3,2,4,2,5]
nomath3 = [3,3,1,1,2,2,4,4,5,5]
score = [0,0,0]
for i in range(len(answers)):
if answers[i] == nomath1[i%len(nomath1)]:
score[0] += 1
if answers[i] == nomath2[i%len(nomath2)]:
score[1] += 1
if answers[i] == nomath3[i%len(nomath3)]:
score[2] += 1
winner = max(score)
answer = []
for i in range(len(score)):
if score[i] == winner:
answer.append(i+1)
return answer
테스트 결과 (~˘▾˘)~
2개 중 2개 성공
파이썬은 들여쓰기를 매우 엄격하게 요구하기 때문에, 함수 내부의 코드는 반드시! 한 수준 들여쓰기를 해야 한다.