https://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하는 값을 오름차순 정렬해주세요.
입출력 예
answersreturn
[1,2,3,4,5] | [1] |
[1,3,2,4,2] | [1,2,3] |
입출력 예 설명
입출력 예 #1
- 수포자 1은 모든 문제를 맞혔습니다.
- 수포자 2는 모든 문제를 틀렸습니다.
- 수포자 3은 모든 문제를 틀렸습니다.
따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.
입출력 예 #2
- 모든 사람이 2문제씩을 맞췄습니다.
문제 해결을 위한 과정
Level 1 문제로서 쉬운 문제였습니다. 단순하게 사람을 p1, p2, p3라 한다면 시험문제가 최대 10,000개 이므로 다음과 같습니다.
p1의 경우 [1, 2, 3, 4, 5] * 2000
p2의 경우 [2, 1, 2, 3, 2, 4, 2, 5] * 2000
p3의 경우 [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] * 1000
여기서 p2의 경우 반복되는 숫자가 8 이므로 원래는 대략 1300을 곱해줘야 하지만 대략적인 값으로 2000번 반복을 시켰습니다. 그 후 입력으로 들어오는 answers 리스트와 비교하며 찍은 답이 정답이라면 각각의 카운트를 증가시켜 줍니다.
문제 해결을 위한 팁
저의 경우는 정답자가 여러 명인 경우 오름차순으로 정렬을 하기 위해 임시 리스트 temp = []를 선언하였습니다. 그 후 각 사람별 맞힌 정답의 수와 각 사람(몇 번째 사람인지)에 대한 정보를 묶어서 temp리스트에 append 해주었습니다.
이 방법을 통해 문제를 많이 맞힌 사람별로 정렬이 가능하고 그 사람이 몇 번째 사람인지 조회도 가능합니다.
소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
def solution(answers):
answer = []
people_1 = [1, 2, 3, 4, 5] * 2000
people_2 = [2, 1, 2, 3, 2, 4, 2, 5] * 2000
people_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] * 1000
num_of_1 = 0; num_of_2 = 0; num_of_3 = 0
for i in range(len(answers)):
if answers[i] == people_1[i]:
num_of_1 += 1
if answers[i] == people_2[i]:
num_of_2 += 1
if answers[i] == people_3[i]:
num_of_3 += 1
temp = [(num_of_1,1), (num_of_2,2), (num_of_3,3)]
temp.sort(reverse = True)
temp.append((-1, -1)) # 마지막 원소를 비교하기 위해 의미없는 수 입력 index out of range를 방지 하기 위함
for i in range(3):
if temp[i][0] != temp[i+1][0]: # 내림차순을 한 결과가 다음 원소랑 다르다면 앞 사람이 무조건 많이 맞춘 사람이므로 앞 사람만 append 해줌
answer.append(temp[i][1])
answer.sort()
return answer
elif temp[i][0] == temp[i+1][0]:
answer.append(temp[i][1])
answer.sort()
return answer
|
cs |
'알고리즘 > 프로그래머스' 카테고리의 다른 글
괄호 변환 (Python) (0) | 2020.12.05 |
---|---|
자물쇠와 열쇠 (Python) (0) | 2020.12.03 |
기둥과 보 설치 (Python) (0) | 2020.11.29 |
완주하지 못한 선수 (Level 1 Python) (0) | 2020.11.28 |
두 개 뽑아서 더하기 (Level 1 Python) (0) | 2020.11.28 |