문제 : lv 1 <모의고사>
입력 : 정답이 순서대로 들어있는 배열 answers
출력 : 가장 많은 정답을 맞힌 사람이 담긴 배열 answer
생각의 과정
세 사람은 아래의 배열이 계속 반복되는 방식으로 답을 입력한다.
first = [1,2,3,4,5]
second = [2,1,2,3,2,4,2,5]
third = [3,3,1,1,2,2,4,4,5,5]
생각할 지점이 2개 있었다.
1. 문제의 갯수가 세 사람의 입력 배열보다 훨씬 길어지면 어떻게 할 것인가?
- 응답자 리스트를 늘린다. -> 리스트 * n
- 정답 리스트의 인덱스를 줄인다. -> 탐색할 때의 인덱스를 ( i % len(리스트))로...
이중에서 2번을 선택해서 풀었다.
2. 가장 점수를 높게 받은 사람이 1명 이상일 수도 있다.
-> 그래서 그냥 max(맞은 점수 리스트)로는 해결할 수가 없다.
-> max(맞은 점수 리스트)으로 최고 점수를 파악한 다음, 최고 점수와 값이 같은 인덱스를 모두 뽑아야 한다.
제출 답안
def solution(answers):
#속도 향상을 위해 딕셔너리로 만듦
person = {0: [1,2,3,4,5]
,1: [2,1,2,3,2,4,2,5]
,2: [3,3,1,1,2,2,4,4,5,5]}
#점수는 값으로 인덱스하기 쉽게 리스트로 만듦
score = [0,0,0]
# 사람별로
for j in range(len(person)):
#답지를 탐색
for i in range(len(answers)):
#문제 갯수가 개인별 답안 리스트보다 훨씬 크므로 전체문제수를 개인 리스트 길이로 나눈 나머지로 인덱스
#정답과 제출 답안이 같으면
if answers[i] == person[j][i%len(person[j])]:
#점수 1점 올리기
score[j] += 1
#최고 점수인 사람이 1명 이상일 수도 있어서 최고점수를 뽑은 다음
max_score = max(score)
#최고 점수와 점수가 같은 사람의 인덱스를 리스트에 넣기
return [x+1 for x in range(len(score)) if score[x] == max_score]
for 문이 여러개 들어가 마음에 들지 않지만,
다행히 효율성 테스트가 없었고, 통과되었다.
'Programming > Coding Test' 카테고리의 다른 글
leetcode 937. Reorder Data in Log Files 리트코드 937. 로그 파일 재정렬 풀이 (0) | 2021.05.06 |
---|---|
leetcode 819. Most Common Word 리트코드 819. 가장 흔한 단어 문제 풀이 (0) | 2021.05.06 |
프로그래머스 코딩테스트 lv 1. 완주하지 못한 선수 문제 풀이 (0) | 2021.05.01 |
투 포인터 two pointer 를 활용하여 문제 해결하기 (0) | 2021.04.25 |
책 <파이썬 알고리즘 인터뷰> 정리 (0) | 2021.04.23 |