생각하는 아져씨

[Programmers] 모의고사 본문

Study/Algorithm

[Programmers] 모의고사

azeomi 2023. 3. 30. 12:54
https://school.programmers.co.kr/learn/courses/30/lessons/42840

문제 정의


수포자는 어떤 패턴으로 정답을 찍는데 3명의 수포자 중 정답을 가장 많이 맞힌 사람이 누구인지 출력하는 문제이다.

접근 방법


시험 문제가 최대 10,000문제로 완전 탐색을 해도 시간 초과는 걱정 없을 것 같아서 완전 탐색으로 접근했다.

문제 해설


  • 1번, 2번, 3번의 수포자의 찍기 패턴을 정의한다.
  • 1번부터 주어진 answers의 길이까지 1번, 2번, 3번이 정답을 맞췄는지 확인한다.
  • 1,2,3번의 패턴의 길이는 다르기때문에 각 패턴의 길이만큼 나눠주면 순서를 반복할 수 있다.
  • 즉, 1번 수포자의 6번 답은 6 & len(1번 패턴 길이) 로 접근할 수 있다.

풀이


# 시험 최대 10,000문제
# 가장 많은 문제를 맞힌 사람이 누구인지, 여러명이면 오름차순으로.

def solution(answers):
    answer = []
    
    p1 = [1,2,3,4,5]    # 1번 수포자 패턴
    p2 = [2,1,2,3,2,4,2,5]  # 2번 수포자 패턴 
    p3 = [3,3,1,1,2,2,4,4,5,5]  # 3번 수포자 패턴
    
    # 수포자당 몇개 맞췄는지 카운트 변수
    p1_cnt = 0
    p2_cnt = 0
    p3_cnt = 0
    
    for i in range(len(answers)):
        if answers[i] == p1[i % len(p1)]:  # 1번 수포자가 맞추면,
            p1_cnt += 1 
        if answers[i] == p2[i % len(p2)]:   # 2번 수포자가 맞추면,
            p2_cnt += 1
        if answers[i] == p3[i % len(p3)]:   # 3번 수포자가 맞추면,
            p3_cnt += 1
    
    scores = [p1_cnt, p2_cnt, p3_cnt]
    max_scores = max(scores)    # 최댓값
    
    # 가장많은 문제를 맞힌 사람이 누구인지 체크
    for i in range(3):
        if scores[i] == max_scores:
            answer.append(i+1)
    
    return answer

정리


  • 아이디어를 떠올리기 쉬운 완전 탐색 문제였다.


Uploaded by N2T