코딩테스트연습(파이썬)
모의고사 / 프로그래머스, 파이썬, 코딩테스트 연습
LearnerToRunner
2022. 12. 18. 00:22
문제
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.
제출답안
def solution(answers):
# 각 학생의 제출답안
p1, p2, p3 = [1, 2, 3, 4, 5], [2, 1, 2, 3, 2, 4, 2, 5], [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
# 답안지의 길이
len_ans = len(answers)
# (학생번호, 맞은 문제개수) 튜플을 담을 리스트
result = []
# 루프
for i, std_ans in enumerate([p1, p2, p3]): # 학생 번호 i, 제출답안 std_ans
len_std = len(std_ans) #각 학생의 제출답안 길이
std_ans = std_ans * (len_ans//len_std+1) if len_std < len_ans else std_ans # 답안이 문제보다 짧을 경우 늘려주기
score = list(map(lambda x, y: x-y, answers, std_ans[:len_ans])) #element-wise substraction
result.append((i+1, score.count(0))) # 리스트에 (학생번호, 맞은 문제 수) 추가
max_score = max(result, key=lambda x: x[1])[1] #맞은 문제수 max값 산출
answer = [r[0] for r in result if r[1] == max_score ]
return answer
문제 바로가기
728x90