문제
https://school.programmers.co.kr/learn/courses/30/lessons/42840
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
수포자 삼인방이 문제를 전부 아래와 같은 방식으로 찍으려고 할 때, 가장 많은 문제를 맞힌 사람이 누구인지 구하는 문제다.
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, ...
제한사항
- 시험은 최대 10,000 문제로 구성되어 있습니다.
- 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
- 가장 높은 점수를 받은 사람이 여럿일 경우, return 하는 값을 오름차순 정렬해 주세요.
예시
Example 1:
answers: [1,2,3,4,5]
return: [1]
Example 2:
answers: [1,3,2,4,2]
return: [1,2,3]
풀이
def solution(answers):
answer = []
person1 = [1, 2, 3, 4, 5]
person2 = [2, 1, 2, 3, 2, 4, 2, 5]
person3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
cnt = [0, 0, 0]
for i, v in enumerate(answers):
if v == person1[i % len(person1)]:
cnt[0] += 1
if v == person2[i % len(person2)]:
cnt[1] += 1
if v == person3[i % len(person3)]:
cnt[2] += 1
max_cnt = max(cnt)
for j, v in enumerate(cnt):
if v == max_cnt:
answer.append(j + 1)
return answer
- 수포자가 정답을 찍는 방식을 전부 리스트로 나타낸다.
- 각각 수포자가 맞춘 문제 수를 저장할 리스트를 만든다.
- answers 리스트의 각 문제 정답을 순회하며 각 수포자의 방식을 비교한다.
- 문제의 인덱스를 수포자의 방식 길이로 나눈 나머지를 사용하여 반복을 처리한다.
- 정답을 맞혔다면 해당 수포자 인덱스를 증가시킨다.
- 가장 많이 맞춘 문제 수를 찾고, 그에 해당하는 수포자의 번호를 구한다.
'알고리즘' 카테고리의 다른 글
[프로그래머스] 소수 찾기 - 파이썬/python (0) | 2024.06.03 |
---|---|
[프로그래머스] 수식 최대화 - 파이썬/python (0) | 2024.05.29 |
[프로그래머스] 신규 아이디 추천 - 파이썬/python (0) | 2024.05.21 |
[프로그래머스] 3진법 뒤집기 - 파이썬/python (0) | 2024.05.17 |
[프로그래머스] 구슬을 나누는 경우의 수- 파이썬/python (2) | 2024.05.14 |