코딩테스트/프로그래머스

[프로그래머스] [Level 1] [완전탐색] 모의고사

박소민 2022. 3. 21. 13:17
문제) 모의고사
 

코딩테스트 연습 - 모의고사

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

programmers.co.kr

 

  • 내 풀이
    • 리스트 곱셈으로 1,2,3번 학생의 답안 만듦
    • count() 함수를 사용
      • 최댓값의 개수만큼만 반복하여 최댓값 인덱스를 0으로 만들 수 있게 함
      • → 같은 값을 가지는 다음 인덱스 구할 수 있음
    • 인덱스 구하는 방식: index() 사용
def solution(answers):
    score=[0,0,0]
    result=[]
    one=[1,2,3,4,5]*(len(answers)//5+1)
    two=[2,1,2,3,2,4,2,5]*(len(answers)//8+1)
    three=[3,3,1,1,2,2,4,4,5,5]*(len(answers)//10+1)
    for i in range(len(answers)):
        ans=answers[i]
        if ans==one[i]:
            score[0]+=1
        if ans==two[i]:
            score[1]+=1
        if ans==three[i]:
            score[2]+=1
    
    m_score=score.count(max(score))
    for i in range(m_score):
        index_s=score.index(max(score))
        result.append(index_s+1)
        score[index_s]=0
        
    result=list(set(result))
    return result

 

  • 다른 사람 풀이
    • 인덱스 구하는 방식: enumerate() 사용
      • enumerate() 함수는 기본적으로 인덱스와 원소로 이루어진 tuple을 생성
      • 인덱스와 원소를 각각 다른 변수에 할당하고 싶다면 인자 풀기(unpacking)를 해줘야 함
    • 규칙만큼만 리스트 값 삽입 → 메모리 감소
    • 정답의 인덱스 값 % 각각의 규칙 수
      • % 나머지 연산으로 인덱스 구할 수 있음 
def solution(answers):
    pattern1 = [1,2,3,4,5]
    pattern2 = [2,1,2,3,2,4,2,5]
    pattern3 = [3,3,1,1,2,2,4,4,5,5]
    score = [0, 0, 0]
    result = []

    for idx, answer in enumerate(answers):
        if answer == pattern1[idx%len(pattern1)]:
            score[0] += 1
        if answer == pattern2[idx%len(pattern2)]:
            score[1] += 1
        if answer == pattern3[idx%len(pattern3)]:
            score[2] += 1

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

    return result