본문 바로가기
코딩 테스트

[Python] 코딩테스트 고득점Kit | 완전탐색1-모의고사

by 카프리썬_ 2021. 5. 26.
728x90

아래의 문제는 프로그래머스 코딩테스트 고득점 Kit 내용이며 코드는 직접 푼 내용입니다.


모의고사

문제상황

수포자 삼인방은 모의고사에 수학 문제를 전부 찍는다.

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 함수

 

제한사항

  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

입출력


풀이과정

완전탐색인만큼 그냥 그대로 문제그대로 풀어야했다.

설마설마 처음에 주어졌던 문제를 찍은걸 배열로 직접 입력해야하나..싶었는데 맞았다..

 

그리고 감을 잡기 어려웠던 부분은 몇개가 맞았는지 계산하는 것이다. 

문제가 총 몇문제인지는 모르겠지만 문제를 찍는 패턴이 있다는 것이 힌트이다.

if answer == sol1[index%len(sol1)]: 

그래서 이렇게 index%len(sol1)을 통해서 나머지값으로 반복적으로 answer과 정답체크를 할 수 있다.

 

결과

내가 푼 정답코드결과

def solution(answers):
    sol1 = [1,2,3,4,5]
    sol2 = [2,1,2,3,2,4,2,5]
    sol3 = [3,3,1,1,2,2,4,4,5,5]
    counts = [0,0,0]
    winner = []
    for index,answer in enumerate(answers):
        if answer == sol1[index%len(sol1)]:
            counts[0]+=1
        if answer == sol2[index%len(sol2)]:
            counts[1]+=1
        if answer == sol3[index%len(sol3)]:
            counts[2]+=1

    for i in range(3):
        if max(counts)==counts[i]:
            winner.append(i+1)

    return winner

설마했던대로 문제를 찍는 패턴을 sol1,sol2,sol3으로 일단 선언을 해둔다.

그리고 for를 통해서 각각 몇개맞았는지 count를 해서 count리스트에 넣어둔다. 

count[0]은 첫번째 사람이 맞춘 문제 수, count[1]은 두번째 사람이 맞춘 문제 수, count[2]는 세번째 사람이 맞춘 문제 수

그래서 결국 이 count리스트 안에서 max값을 리턴하면 된다. 

 

배운점

  • enumerate()
  • 반복적인 패턴을 찾을때? 나머지수(%)를 계산해서 이용하자

참고 

참고한 블로그 링크

반응형