[프로그래머스 LV.1] 모의고사 — Python 정답 & 해설

2026. 5. 21. 23:51·코딩테스트/알고리즘

🔗 1. 문제 URL

https://school.programmers.co.kr/learn/courses/30/lessons/42840

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


 

📝 2. 문제 요구사항 정리

1번, 2번, 3번 수포자가 각각 자신만의 규칙적인 반복 패턴으로 문제를 찍을 때, 주어진 정답 배열 answers와 비교하여 가장 많은 문제를 맞힌 사람이 누구인지 구하는 문제입니다.

  • 최종 출력 배열: 가장 많은 문제를 맞힌 사람의 번호 리스트 (1번, 2번, 3번)
  • 정렬 조건: 가장 많이 맞힌 사람이 여러 명일 경우, 번호를 기준으로 오름차순 정렬하여 반환

 


 

💡 3. 핵심 개념

 

✔ 1) 찍기 패턴의 주기성과 나머지 연산(%)

수포자들의 패턴 길이는 각각 5개, 8개, 10개로 다릅니다. 문제의 개수가 이보다 많아지더라도 패턴이 처음부터 반복되어야 하므로, 현재 문제의 인덱스(idx)를 패턴의 길이(len(pat))로 나눈 나머지 연산(idx % len(pat))을 통해 정답을 순환하며 비교합니다.

 

✔ 2) enumerate()를 활용한 데이터 추출

정답 배열을 돌면서 현재 몇 번째 문제인지 확인하는 인덱스(idx)와 실제 정답 값(ans)이 동시에 필요합니다. for idx, ans in enumerate(answers): 구조를 사용하면 이를 임시 변수 없이 깔끔하게 제어할 수 있습니다.

 

✔ 3) 최고 득점자 선별 및 동점자 처리

max(counts) 함수를 통해 세 사람 중 가장 높은 점수를 먼저 찾습니다. 이후 점수 배열을 순회하며 최고 점수와 일치하는 사람의 인덱스에 +1을 해준 뒤(사람 번호는 1부터 시작하므로) 결과 배열에 담아줍니다. 순서대로 검사하기 때문에 동점자 정렬 조건(오름차순)도 자연스럽게 만족합니다.

 


 

 

✅ 4. 정답 Python 코드

def solution(answers):
    # 정답이 들어있는 배열 answers
    
    # '모든' 문제를 찍는다
    
    # 1번 -> 1,2,3,4,5 / 5개
    # 2번 -> 2,1,2,3,2,4,2,5 / 8개
    # 3번 -> 3,3,1,1,2,2,4,4,5,5 / 10개
    
    # 가장 많은 문제를 맞힌 사람 배열에 담기
    # 여럿일 경우 오름차순 정렬
    
    # 1번, 2번, 3번 사람 각자 맞은 개수 구해서 리스트에 전부 넣기
    # answer.len 2개 이상이면 정렬하기
    
    answer = []
    
    patterns = [
        [1,2,3,4,5],
        [2,1,2,3,2,4,2,5],
        [3,3,1,1,2,2,4,4,5,5]
    ]
    
    counts = [0, 0, 0]
    
    for idx, ans in enumerate(answers):
        for i, pat in enumerate(patterns):
            if pat[idx % len(pat)] == ans:
                counts[i] += 1
    
    mostCount = max(counts)
    
    # 혹시 맞은 개수 같은 사람 있으면
    for i, count in enumerate(counts):
        if counts[i] == mostCount:
            answer.append(i + 1)
    
    return answer

 


 

💬 5. 풀이하면서 느낀 점

 

이번 문제를 풀면서 파이썬의 enumerate() 내장 함수에 대해 까먹고 있었는데 공부하고 활용해 볼 수 있는 좋은 계기였습니다.

기존에는 반복문을 돌릴 때 단순히 요소의 값만 꺼내 쓰거나 별도의 인덱스 카운터 변수를 선언해서 쓰곤 했는데, enumerate()를 사용하니 인덱스(순서)와 원소를 튜플 형태로 동시에 안전하게 꺼내올 수 있어서 코드가 훨씬 직관적이고 군더더기 없어졌습니다.

 

특히 찍기 패턴처럼 특정 주기로 인덱스가 순환해야 하는 구조에서는 인덱스 값 제어가 필수적인데, 이중 for문 내부에서도 두 번의 enumerate()를 엮어내어 각 수포자의 점수를 효율적으로 합산해 낼 수 있었습니다. 완전탐색의 기본기를 다질 수 있는 기회였습니다.

 

궁금하신 점이나 포스팅에 대한 피드백이 있다면 댓글로 편하게 남겨주세요. 도움이 되셨다면 공감이나 댓글 한 줄 남겨주시면 포스팅을 이어가는 데 큰 힘이 됩니다. 😊

'코딩테스트 > 알고리즘' 카테고리의 다른 글

[프로그래머스 LV.0] 배열 조각하기 — Python 정답 & 해설  (0) 2026.06.11
[프로그래머스 LV.2] 행렬의 곱셈 — Python 정답 & 해설  (0) 2026.05.22
[프로그래머스 LV.1] 두 개 뽑아서 더하기 — Python 정답 & 해설  (0) 2026.05.21
[프로그래머스 LV.2] 조건에 맞는 개발자 찾기 — MySQL 정답 & 해설  (0) 2025.11.27
[SWEA 1926] 간단한 369 게임 — Java 풀이 & 해설  (0) 2025.11.22
'코딩테스트/알고리즘' 카테고리의 다른 글
  • [프로그래머스 LV.0] 배열 조각하기 — Python 정답 & 해설
  • [프로그래머스 LV.2] 행렬의 곱셈 — Python 정답 & 해설
  • [프로그래머스 LV.1] 두 개 뽑아서 더하기 — Python 정답 & 해설
  • [프로그래머스 LV.2] 조건에 맞는 개발자 찾기 — MySQL 정답 & 해설
작지만 꾸준한 성장으로
작지만 꾸준한 성장으로
contact
  • 작지만 꾸준한 성장으로
    파랑새
    작지만 꾸준한 성장으로
  • 전체
    오늘
    어제
    • 분류 전체보기 (26)
      • IT (3)
      • 코딩테스트 (23)
        • 알고리즘 (12)
        • MYSQL (11)
      • 패션 (0)
      • 독후감 (0)
      • TIL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스 lv.0
    Programmers
    Pandas pivot
    I/O Bound
    모델 추론
    알고리즘
    mysql
    CPU Bound
    코테
    파이썬
    sql 코딩테스트
    프로그래머스 lv.2
    파이썬코테
    Python
    프로그래머스 lv.1
    백준
    와이드 포맷 롱 포맷
    Pandas melt
    SWEA
    python3
    데이터베이스
    프로그래머스
    자바
    데이터 전처리 파이프라인
    코딩테스트
    데이터 리모델링
    Pandas groupby agg
    공공데이터 전처리
    long format
    wide format
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
작지만 꾸준한 성장으로
[프로그래머스 LV.1] 모의고사 — Python 정답 & 해설
상단으로

티스토리툴바