[PG42840] 모의고사
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/프로그래머스

[PG42840] 모의고사

프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/42840

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

🚩 문제 설명

프로그래머스 #42840

◾ 문제를 찍는 방식 3가지가 주어지고 모의고사 정답이 든 배열이 주어진다.

◾ 3가지 방식 중에서 가장 많이 문제를 맞힌 사람이 누구인지 구하는 문제

 

 


 

 

✅ 입출력

answers return
[1,2,3,4,5] [1]
[1,3,2,4,2]
[1,2,3]

✔️ 예시

만약 정답이 [1, 3, 2, 4, 2] 라고 한다면
수포자 찍는 방식 맞힌 갯수 return
1 2 3 4 5 2 [1]
2 1 2 3 2 4 2 5 2 [1, 2]
3 3 1 1 2 2 4 4 5 5 1 [1, 2, 3]

◾ 따라서 이 예시에서는 첫번째, 두번째 수포자가 첫번째로 들어가야한다.

◾ 여러 사람을 리턴할 시에는 오름차순으로 리턴해야한다.

 


 

 

📑 문제 풀이

파이썬으로 풀었다.
math1 = [1, 2, 3, 4, 5]
math2 = [2, 1, 2, 3, 2, 4, 2, 5]
math3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]


def solution(answers):
    ans = []
    cnt1, cnt2, cnt3 = 0, 0, 0

    for i in range(len(answers)):  # 0 ~ 4 만큼 돈다
        if answers[i] == math1[i % len(math1)]:
            cnt1 += 1
        if answers[i] == math2[i % len(math2)]:
            cnt2 += 1
        if answers[i] == math3[i % len(math3)]:
            cnt3 += 1

    if cnt1 >= max(cnt2, cnt3):
        ans.append(1)
    if cnt2 >= max(cnt1, cnt3):
        ans.append(2)
    if cnt3 >= max(cnt1, cnt2):
        ans.append(3)

    return ans

◾ 각 찍는 방식을 math 배열로 만들어줬다.

◾ 반복문은 answers의 길이만큼 돈다.

◾ 만약 answers의 요소와 찍는 방식의 요소가 같다면 카운트 해준다.

  • answers의 길이가 찍는 방식의 배열의 길이보다 클 수 있으므로
  • % len(math) 이런식으로 나머지를 구하는 방식으로 인덱스를 구해준다.

◾ 최댓값 순서대로 ans 배열에 추가해준다.

 

 

 

 

 

 

 

 

 


 

728x90