안녕하세요.
강렬한 스포트라이트 입니다!
하기의 문제를 Python 언어를 사용하여 구현하고자 합니다.
<문제 설명>
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 각 고른 정답을 리스트에 담은 후 맞출 경우 cnt의 값을 증가해줍니다.
그리고 cnt의 최댓값과 동일한 수포자(1,2,3)를 return하여 구현한 코드입니다.
def solution(answers):
q1=[1,2,3,4,5]*len(answers)
q2=[2,1,2,3,2,4,2,5]*len(answers)
q3=[3,3,1,1,2,2,4,4,5,5]*len(answers)
cnt=[0,0,0] #맞춘 문제 갯수를 누적함
result=[] #가장 높은 점수를 받은 수포자
for i in range(len(answers)):
if answers[i]==q1[i]:
cnt[0]+=1
if answers[i]==q2[i]:
cnt[1]+=1
if answers[i]==q3[i]:
cnt[2]+=1
for j in range(len(cnt)):
if cnt[j]==max(cnt):
result.append(j+1)
return result
2) 수포자1,2,3 각 고른 정답을 하나의 리스트에 담아서 2차원 리스트를 만듭니다.
이후 enumerate() 함수를 사용하여 하나의 조건문에도 충족될 수 있도록 구현한 코드입니다.
def solution(answers):
q=[[1,2,3,4,5],
[2,1,2,3,2,4,2,5],
[3,3,1,1,2,2,4,4,5,5]]
cnt=[0,0,0]
for idx1,i in enumerate(answers):
for idx2,j in enumerate(q):
if i==j[idx1%len(j)]:
cnt[idx2]+=1
return [idx3+1 for idx3,k in enumerate(cnt) if k==max(cnt)] #for,if 한줄로 기재함
해보시고 문의사항이 있으시면 댓글로 남겨주세요.´◡`
감사합니다!
'PS > programmers' 카테고리의 다른 글
| [Lv. 1] 최소직사각형(Python) (0) | 2023.04.06 |
|---|---|
| [Lv. 1] K번째수(Python) (0) | 2023.04.04 |
| [Lv. 1] 음양 더하기(Python) (0) | 2023.03.30 |
| [LV. 1] 숫자 문자열과 영단어(Python) (1) | 2023.03.29 |
| [Lv. 1] 콜라츠 추측(Python) (0) | 2023.03.28 |