프로그래머스 레벨1 [정답율 59%]
문제
문제 정리
사용한 파라미터:
s1_answer, s2_answer, s3_answer(int) : 각 학생들이 정답을 맞춘 개수
winner(list) : 우승자 저장 코드
s1, s2, s3(list_int) : 학생들의 패턴
학생들의 패턴을 파악
answer와 정답인 경우 정답을 맞춘 개수+1
제일 많이 맞춘 사람 리턴
코드
def solution(answers):
s1_answer, s2_answer, s3_answer=0, 0, 0
winner=[]
s1=[1,2,3,4,5]
s2=[2, 1, 2, 3, 2, 4, 2, 5]
s3=[3,3,1,1,2,2,4,4,5,5]
s1+=s1*(len(answers)//len(s1))
s2+=s2*(len(answers)//len(s2))
s3+=s3*(len(answers)//len(s3))
for i in range(len(answers)):
if s1[i]==answers[i]:
s1_answer+=1
if s2[i]==answers[i]:
s2_answer+=1
if s3[i]==answers[i]:
s3_answer+=1
if max(s1_answer, s2_answer, s3_answer)==s1_answer:
winner.append(1)
if max(s1_answer, s2_answer, s3_answer)==s2_answer:
winner.append(2)
if max(s1_answer, s2_answer, s3_answer)==s3_answer:
winner.append(3)
return winner
코드 설명
s1_answer, s2_answer, s3_answer=0, 0, 0
winner=[]
s1=[1,2,3,4,5]
s2=[2, 1, 2, 3, 2, 4, 2, 5]
s3=[3,3,1,1,2,2,4,4,5,5]
사용할 파라미터 및 학생들의 패턴 선언
s1+=s1*(len(answers)//len(s1))
s2+=s2*(len(answers)//len(s2))
s3+=s3*(len(answers)//len(s3))
answer의 길이에 맞도록 학생들의 패턴 늘리기(append)
for i in range(len(answers)):
if s1[i]==answers[i]:
s1_answer+=1
if s2[i]==answers[i]:
s2_answer+=1
if s3[i]==answers[i]:
s3_answer+=1
answer와 학생들의 답이 맞는지 확인하고 맞으면 +1
if max(s1_answer, s2_answer, s3_answer)==s1_answer:
winner.append(1)
if max(s1_answer, s2_answer, s3_answer)==s2_answer:
winner.append(2)
if max(s1_answer, s2_answer, s3_answer)==s3_answer:
winner.append(3)
return winner
제일 많이 맞춘 학생을 winner에 append하여 반환.
append를 쓰는 이유는 2명 이상의 학생이 동일한 점수를 가지고 있을 경우가 있기 때문.
제출 결과
insight
길이를 구할때 % 연산자를 써서 나타내면 더 간결함
점수를 더할때 변수를 쓰지않고 한 리스트에서 처리하면, enumerate를 사용하여 승자 결과값을 간결하게 나타낼 수 있음