문제 설명
문제 접근 방법
- lv1의 문제인 만큼 경우의 수를 찾는게 매우 쉽다. 각 수험자는 찍는 패턴이 나오고 이것을 답과 비교하여 맞으면 맞는 개수를 올려주면 된다.
- 찍는 패턴은 일정 길이만큼 가다가 다시 반복되므로 인덱스에 배열의 길이만큼 나눈 나머지로 반복을 표현할 수 있다.
- 가장 많이 맞춘 사람을 골라야 하므로 1, 2, 3번이 맞춘 개수를 표현해야 한다. 정렬을 수행할 시에 인덱스가 뒤섞여 답을 내지 못하므로 [맞춘 개수, 수포자 번호]로 score을 정의하면 된다.
- 이후 정렬을 수행해 최대 값을 찾고, 해당 최대 값과 같은 값을 가진 친구의 수포자 번호를 answer에 넣으면 해결된다. 동일한 값을 가지는 경우에도 순서대로 찾으니 조건을 만족한다.
풀이 코드
def solution(answers):
answer = []
data = [
[1, 2, 3, 4, 5],
[2, 1, 2, 3, 2, 4, 2, 5],
[3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
]
score = [[0, 1], [0, 2], [0, 3]]
for p in range(3):
for i in range(len(answers)):
if data[p][i % len(data[p])] == answers[i]:
score[p][0] += 1
score.sort(key= lambda x: x[0], reverse=True)
mx_score = score[0][0]
for element in score:
if element[0] == mx_score:
answer.append(element[1])
return answer
'Algorithm > BruteForce' 카테고리의 다른 글
[백준][BOJ] 27958 사격 연습 (0) | 2023.04.06 |
---|---|
[BOJ 18428] 감시 피하기 (0) | 2022.12.10 |
[Programmers] 전력망을 둘로 나누기 - python (1) | 2022.11.23 |
[Programmers] 카펫 - python (1) | 2022.11.23 |
완전 탐색의 접근방법과 사용할 수 있는 방법들 (1) | 2022.11.22 |