728x90
반응형
📌 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42840
📌 문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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하는 값을 오름차순 정렬해주세요.
📌 풀이 과정
- 1번, 2번, 3번 수험자의 답을 찍는 패턴을 분석한다.
- 그리고 answers 배열을 한 바퀴 도는 동안 1번, 2번, 3번 수험자의 패턴도 같이 돌린다.
- 각 수험자에게 인덱스를 하나씩 부여한다. pt1, pt2, pt3
- 📢 주의할 점
- 맞췄을 경우에 tmp[i] (1번 => 0번 인덱스, 2번 => 1번 인덱스, 3번 => 2번 인덱스) 각각에 1씩 더한다.
- 단, 포인터 pt# 는 for문 한번 돌릴 때마다 무조건 1씩 증가시켜야 한다. (맞췄을 때만 증가시키는 거 아님 !!!)
- 포인트 pt#가 끝에 도달했을 때는 0으로 돌아갈 수 있도록 한다.
- 모든 채점 끝난 뒤, max(tmp)값과 동일한 값을 가진 인덱스를 1씩 더해 리턴한다.
📌풀이 코드
def solution(answers):
answer = []
tmp = [0, 0, 0]
one = '12345'; pt1 = 0
two = '21232425'; pt2 = 0
three = '3311224455'; pt3 = 0
for i in range(len(answers)):
print(answers[i], one[pt1], two[pt2], three[pt3])
if answers[i] == int(one[pt1]): tmp[0] += 1
if answers[i] == int(two[pt2]): tmp[1] += 1
if answers[i] == int(three[pt3]): tmp[2] += 1
pt1 += 1; pt2 += 1; pt3 += 1
if pt1 == len(one): pt1 = 0
if pt2 == len(two): pt2 = 0
if pt3 == len(three): pt3 = 0
for i,t in enumerate(tmp):
if max(tmp) == t:
answer.append(i+1)
return answer
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Python] 알고리즘고득점Kit-탐욕법(Greedy)-체육복 (2) | 2024.10.14 |
---|---|
[프로그래머스/Python] 알고리즘고득점kit-완전탐색-소수찾기 (0) | 2024.10.14 |
[프로그래머스/Python] 알고리즘고득점Kit-완전탐색-최소직사각형 (1) | 2024.10.14 |
[프로그래머스/Python] 알고리즘고득점Kit-해시-폰켓몬 (5) | 2024.10.13 |
[프로그래머스/Python] 알고리즘고득점Kit-해시-의상 (1) | 2024.10.13 |