관리 메뉴

오늘도 배운다

모의고사 / 프로그래머스, 파이썬, 코딩테스트 연습 본문

코딩테스트연습(파이썬)

모의고사 / 프로그래머스, 파이썬, 코딩테스트 연습

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
Comments