Q. 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.

 

입출력 예

answersreturn

[1,2,3,4,5] [1]
[1,3,2,4,2] [1,2,3]

 

 

 

def solution(answers):
    answer = []
    st1 = [1,2,3,4,5]     #수포자1,2,3의 찍기 규칙을 파악하고 리스트에 담기
    st2 = [2,1,2,3,2,4,2,5] 
    st3 = [3,3,1,1,2,2,4,4,5,5] 
    cnt1,cnt2,cnt3  = 0,0,0    #수포자들이 맞춘 점수를 셀 변수 cnt 
    
    for i in range (0, len(answers)):
        if answers[i] == st1[i%5]:   #문제(answers)의 길이만큼을 수포자들의 길이로 나눔
            cnt1 += 1        
        if answers[i] == st2[i%8]:
            cnt2 += 1  
        if answers[i] == st3[i%10]:
            cnt3 += 1    
            
    m = max(cnt1, cnt2, cnt3)   #max 함수를 써서 cnt 최댓값 비교
    if m == cnt1:
        answer.append(1)
    if m == cnt2:
        answer.append(2)
    if m == cnt3:
        answer.append(3)
        
    return answer

 

문제(answers)의 길이만큼(=편하게 문제의 갯수)을 수포자들의 찍는 규칙의 길이만큼으로 나누는 것을 생각했다.

수포자1을 예를 들면, [1,2,3,4,5]가 규칙적으로 찍어지기 때문에 6번 문제는 1로 7번 문제는 2... 이런식으로 찍게 될텐데 만약 문제의 갯수가 6이라면 6을 수포자1이 찍는 규칙의 길이 5로 나눈 나머지 1과 같고 수포자1은 규칙 첫번째에 해당하는 1번을 찍게 될 것이다. 그래서 문제의 갯수 len(answers)를 수포자 1의 규칙 5개로 나누어 비교하게끔 했다!!

 

알고리즘 스터디 출제 문제중에서 처음으로 맞추고 포스팅하는 문제가 있다니...감회가 새롭다.

 

'Algorithm' 카테고리의 다른 글

programmers #2016년  (0) 2021.08.06
programmers #완주하지 못한 선수  (0) 2021.08.05
programmers #K번째수  (0) 2021.07.22
programmers #하샤드 수  (0) 2021.07.22
programmers #핸드폰 번호 가리기도움말  (0) 2021.07.21

+ Recent posts