하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원
2023.01.04~
2023.01.10 [7일차]
프로그래머스 LV1.
모의고사
(완전탐색 문제)
https://school.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하는 값을 오름차순 정렬해주세요.
입출력 예
입출력 예 설명
입출력 예 #1
수포자 1은 모든 문제를 맞혔습니다.
수포자 2는 모든 문제를 틀렸습니다.
수포자 3은 모든 문제를 틀렸습니다.
따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.
입출력 예 #2
모든 사람이 2문제씩을 맞췄습니다.
문제 풀이 방법
- 일단 나는 딕셔너리 괴물,, 무조건 일단 쓰고 보는거 enumerate와 dictionary ㅋㅎ
제한 사항에서 answers가 10,000 이라는 것 그리고, 처음에 1,2,3명의 리스트 길이가 10,000으로 맞아 떨어진다는 것을 보고 두개를 잘 핸들링 해봐야 한다고 생각해서 10,000으로 리스트 길이 배열을 맞춤
코드 공유
def solution(answers):
answer = []
a = [1,2,3,4,5] * 2000
b = [2,1,2,3,2,4,2,5] * 1250
c = [3,3,1,1,2,2,4,4,5,5] *1000
correct_dic = {1:0, 2:0, 3:0}
for idx, ans in enumerate(answers):
if answers[idx] == a[idx] : correct_dic[1]+=1
if answers[idx] == b[idx] : correct_dic[2]+=1
if answers[idx] == c[idx] : correct_dic[3]+=1
high = max(answer_dic.values())
for k,v in answer_dic.items():
if v >=high:
answer.append(k)
return answer
증빙
다른 사람 풀이
제일 베스트
내 방식대로 짜면.. 남의 코드 잘안보임.. 조졌다
다른 사람 풀이 중에 내가 수작업으로 했던 1250, 2000, *1000 이짓거리를
itertools의 cycle 함수를 활용해서 한 사람이 있었으니?
오케이 cycle 함수 너 압수~
cycle 함수 문닫고 맹연습
여담
수포자들은 누군가에 피해를 줍니다 반드시..