- 문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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하는 값을 오름차순 정렬해주세요.
answer | result |
[1,2,3,4,5] | [1] |
[1,3,2,4,2] | [1,2,3] |
수포자 친구들이 문제를 찍어 맞추는 숫자를 구하는 문제입니다. 문제 분류는 "완전 탐색" 이며, 주어진 학생들의 답 선택 규칙을 파악하고 이를 코드로 이끌어내면 간단히 풀 수 있었던 문제였습니다.
1번 수포자 : [1,2,3,4,5] 의 반복
2번 수포자 : [2,1,2,3,2,4,2,5] 의 반복
3번 수포자 : [3,3,1,1,2,2,4,4,5,5] 의 반복
주어진 예시에서 다음과 같은 규칙을 발견하셨다면 이 문제는 다 푸 신것이나 다름없습니다.
answer 리스트가 주어질 때 각 요소 값들을 하나씩 "순차탐색" 하여 끝까지 "완전 탐색" 하시면됩니다.
완전 탐색을 하는 코드는 다음과 같습니다. 각 수포자들은 각기 다른 규칙을 가지므로, 규칙을 정의한 리스트 "first_st, second_st, third_st" 를 선언 후 순서대로 answer와 비교하면 됩니다.
first_st = [1,2,3,4,5] # 1 수포자
second_st = [2,1,2,3,2,4,2,5] # 2 수포자
third_st = [3,3,1,1,2,2,4,4,5,5] # 3 수포자
first_count = 0
second_count= 0
third_count = 0
for index, answer in enumerate(answers):
if answer == first_st[index%5]: # len(first_st) = 5
first_count+=1
if answer == second_st[index%8]: # len(second_st) = 8
second_count+=1
if answer == third_st[index%10]: # len(third_st) = 10
third_count +=1
해당 코드를 실행하면 얻을 수 있는 내용은 "각 학생 별 정답 갯수"입니다.
우리가 구해야 하는 것은 "가장 많은 문제를 맞힌 사람" 이므로 저는 학생 별 맞힌 갯수를 알 수 있는 dict 자료형을 선언하여 해결하고자했습니다.
count_dict = {1: first_count, 2:second_count, 3:third_count}
1. 학생 별 맞춘 갯수를 구한다. --> dict자료형을 이용
2. 1등을 구한다.
3. 1등과 같은 갯수를 맞춘 학생을 찾는다. (가장 높은 점수를 받은 사람이 여럿일 수 있음)
다음과 같은 조건을 만족한 최종 코드는 아래와 같습니다.
def solution(answers):
first_st = [1,2,3,4,5]
second_st = [2,1,2,3,2,4,2,5]
third_st = [3,3,1,1,2,2,4,4,5,5]
first_count = 0
second_count= 0
third_count = 0
for index, answer in enumerate(answers):
if answer == first_st[index%5]:
first_count+=1
if answer == second_st[index%8]:
second_count+=1
if answer == third_st[index%10]:
third_count +=1
count_dict = {1: first_count, 2:second_count, 3:third_count}
top_score = max(count_dict.values())
result = [student for student,score in count_dict.items() if score==top_score]
return result
'Programmers 풀이 > [LEVEL 1]' 카테고리의 다른 글
[Python] 프로그래머스 - 두 개 뽑아서 더하기 (0) | 2020.12.13 |
---|---|
[MySQL] 최댓값 구하기 (0) | 2019.10.28 |
[Python] 프로그래머스 - 문자열 다루기 기본 (0) | 2019.10.14 |
[Python] 프로그래머스 - 문자열 내 마음대로 정렬하기 (0) | 2019.10.11 |
[Python] 프로그래머스 - 이상한 문자 만들기 (0) | 2019.06.14 |