[Python] 프로그래머스 lv1 - 모의고사

2023. 5. 20. 22:49알고리즘/문제풀이

[Python] 프로그래머스 lv1 - 모의고사

코딩테스트 연습 - 모의고사 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제설명

 

 

  • 정리
    • 가장 많이 맞춘 사람의 번호를 출력
    • 도움 받은 정보
      • 사람마다 지정받은 찍기 번호 리스트의 길이가 달라서 해당 경우에는 어떤 방식으로 인덱스를 지정해야 하나 고민
      • 이때 주어진 정답의 리스트의 i를 사람의 정답 리스트의 길이로 나눠주면 번호가 지속적으로 반복된다는 점, 이를 통해 정답 체크 가능
    • enumerate 사용으로 idx와 score 동시에 접근하기
  • 의사 코드
    • check_answer 생성
      • 각 사람마다 정답이 맞았는지 체크
    • 문제에서 요구하는 찍기 리스트와 정답의 갯수 파악을 위한 리스트 작성
    • 반복문 실행, 정답지의 길이만큼 반복
      • 이때 chekc_answer 실행
    • 인덱스와 점수를 반복
      • 만약 점수가 해당 right에서 가장 큰 수와 일치하면 리스트에 등록
      • 이때 문제에서는 번호가 동일 시 오름차순으로 넣으라 했는데 이때 반복문을 통해 처음부터 진행하기에 해결

 

 

풀이코드

 

def check_answer(answers, i, p, right, n):
    if answers[i] == p[(i % len(p))]:
        right[n] += 1


def solution(answers):
    answer = []
    p1 = [1, 2, 3, 4, 5]
    p2 = [2, 1, 2, 3, 2, 4, 2, 5]
    p3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    right = [0, 0, 0]

    for i in range(len(answers)):
        check_answer(answers, i, p1, right,0)
        check_answer(answers, i, p2, right,1)
        check_answer(answers, i, p3, right,2)

    for idx, score in enumerate(right):
        if score == max(right):
            answer.append(idx + 1)

    return answer