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