[Programmers] 모의고사

hodu·2022년 11월 9일
0

algorithm

목록 보기
25/27

A, B, C라는 학생이 모의고사를 다 찍을건데

A는 1, 2, 3, 4, 5
B는 2, 1, 2, 3, 2, 4, 2, 5
C는 3, 3, 1, 1, 2, 2, 4, 4, 5, 5

로 찍는다고 할 때 맞히는 개수가 많은 학생을 출력해주는 문제.

용도에 따라 두가지 메서드로 나눠줬다.

  1. 실행 메서드
  2. 카운트 메서드

우선 카운트 메서드를 먼저 보자면

def counter(answers, supo):
    value = 0
    supo_len = len(supo)
    for i in range(len(answers)):
        if answers[i] == supo[i % supo_len]:
            value += 1
    return value

나머지(%)를 이용해서 정답이랑 비교를 해주고,
맞으면 value값을 증가시킨다.

아래는 실행 메서드

#모의고사
def solution(answer):
    A = [1, 2, 3, 4, 5]    
    B = [2, 1, 2, 3, 2, 4, 2, 5]
    C = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]

    answer_count = [0, 0, 0]
    answer_count[0] = counter(answer, A)
    answer_count[1] = counter(answer, B)
    answer_count[2] = counter(answer, C)

    m = max(answer_count)
    k = [(i+1) for i in range(len(answer_count)) if answer_count[i] == m]
    return k

A, B, C 학생들이 찍을 번호를 선언해주고
얼마나 많이 맞혔는지 확인해줄 answer_count를 선언해준다.
여기다가 counter 메서드를 이용해서 실제 맞힌 개수를 가져온다.

그리고 이 문제를 통과하기 위해서는 맞힌 개수가 동일한 친구들을 알려줘야 하는데,
리스트 안 for문을 이용해서,
가장 큰 값인 m과 같을 경우 k라는 배열에 넣어준다.

그리고 for문의 i는, 0부터 시작한다는 배열의 규칙이 있기 때문에 (i+1)을 해줘야 원하는 정답이 나온다.

profile
안녕 세계!

0개의 댓글