[Py_Lv1] 모의고사

Sunghun📈·2021년 3월 23일
0

프로그래머스

목록 보기
10/93
post-thumbnail

- 문제 설명

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

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하는 값을 오름차순 정렬해주세요.

- 입출력 예

- 접근법

문제 내용과 출력 예시를 보았을때 굉징히 쉽게 해결할 줄 알았던 문제
파이썬을 공부하면서 배운 numpy와 dict를 이용해 해결하려고 했으나 실패하고
다른 방법으로 문제를 해결해 보았다.

문제 풀이 중 2가지에서 어려움을 겪었다.

첫번째는 정답 개수에 따른 1,2,3번 학생의 출력이었다.

여러방법을 찾다가 가장 큰 값을 비교하여 같으면 인덱스 값에 +1을 하여
리스트에 넣어 해결하였다

두번째는 채점과정에서 발생하였다.

answers의 값이 학생들이 찍는 패턴 이상으로 주어졌을 경우
사이클을 생각하지 못하고 코드를 작성하여 실패가 나왔다.

이걸 해결하기 위해서 여러가지 시도 끝에
나머지 값을 찾아주는 %을 활용하여 해결할 수 있었다.

문제를 풀면서 발생한 큰 사건은 너무도 오래걸렸다는 것이다.

3시간 동안 풀다가 지쳐서 일어서고 집 밖을 나가기를 반복하고
겨우 풀 수 있었다. 😥

덕분에 계획한 다른 공부에 시간을 줄여야할것 같다.

=============================================================
복습 전 풀이

def solution(answers):
    student_answers = [[1, 2, 3, 4, 5],
                       [2, 1, 2, 3, 2, 4, 2, 5],
                       [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]]
    answer = []
    result = [0,0,0]

    for i, quiz_answer in enumerate(answers):
        for j, student_answer in enumerate(student_answers):
            if quiz_answer == student_answer[i % len(student_answer)]:
                result[j] += 1
                
                
    maxvalue = max(result)
    for i in range(len(result)):
        if result[i] == maxvalue:
            answer.append(i+1)            
    return answer

복습 시 풀이

def solution(answers):
    patterns = [[1,2,3,4,5],[2,1,2,3,2,4,2,5],[3,3,1,1,2,2,4,4,5,5]]
    result = []
    answer = []
    
    for i in patterns:
        cnt = 0
        if len(answers) > len(i):
            i = i * (len(answers) // len(i) + 1)
            
        for a, p in zip(answers, i):
            if a-p == 0:
                cnt+=1
                
        result.append(cnt)
        
    max_value = max(result)
        
    for i in range(len(result)):
        if max_value == result[i]:
            answer.append(i+1)
    
    return answer
profile
데이터 분석과 AI 분야의 전문가를 꿈꾸는 청년

0개의 댓글