[프로그래머스] Lv1. 모의고사(Python)

zzzzsb·2024년 10월 8일
0

프로그래머스

목록 보기
30/33

문제 링크

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

풀이시간

13분

접근 방식

찍는 방식을 pattern 리스트에 저장해두고, for문으로 순회하면서 몇개를 맞췄는지 카운팅했다.

이때 패턴 1회를 전부 돌고나면, 다시 처음 패턴으로 돌아오도록 인덱스를 초기화했다.

그러면 배열에 1번,2번,3번 수포자가 각각 몇문제씩 맞췄는지 숫자가 들어있을거고,

그중 가장 높은 점수를 변수에 저장해두고 가장 높은 점수를 얻은 수포자 번호를 answer 배열에 추가해준다!

전형적인 완전탐색 문제.


정답 코드

def solution(answers):
    answer = []
    pattern = [[1,2,3,4,5], [2,1,2,3,2,4,2,5],[3,3,1,1,2,2,4,4,5,5]]
    score = []
    for p in pattern:
        idx = 0
        cnt = 0
        for i in range(len(answers)):
            if idx == len(p):
                idx = 0
            if answers[i] == p[idx]:
                cnt += 1
            idx += 1
        score.append(cnt)
    high_score = max(score)
    for i in range(len(score)):
        if score[i] == high_score:
            answer.append(i+1)
            
    return answer

Thinking 👀

다른 사람들 풀이를 봤는데 enumerate()를 사용한 코드가 있어서 수정해봤다.

그리고 인덱스 갱신하는 부분도 % 연산자를 활용한 방식으로 수정했다.

def solution(answers):
    answer = []
    pattern = [[1,2,3,4,5], [2,1,2,3,2,4,2,5],[3,3,1,1,2,2,4,4,5,5]]
    score = []
    for p in pattern:
        cnt = 0
        for i, a in enumerate(answers):
            if a == p[i%len(p)]:
                cnt += 1
        score.append(cnt)
    
    high_score = max(score)

    for i in range(len(score)):
        if score[i] == high_score:
            answer.append(i+1)
    return answer

enumerate()

  • 파이썬의 내장함수, 시퀀스 자료형(순서가 있는 자료형)을 입력으로 받았을때 인덱스와 값을 포함해 리턴해준다.
  • for문에서 인덱스와 값을 동시에 접근하면서 반복하고 싶을때 사용
  • enumerate() 함수는 인덱스와 원소로 이루어진 튜플을 만들어준다.
    for i, el in enumerate([”A”, “B”, “C”]):
    		print(i, el)
    
    """
    출력결과 ...
    
    0 A
    1 B
    2 C
    """
profile
성장하는 developer

0개의 댓글