[프로그래머스] 완전탐색(Brute Force) - 모의고사 (Python)

Daisy 🌼·2022년 7월 26일
1

프로그래머스

목록 보기
14/36
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하는 값을 오름차순 정렬해주세요.

  • 입출력 예

    따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.
    • 입출력 예 #2
      모든 사람이 2문제씩을 맞췄습니다.

👩‍💻 My cording

풀이 1 : for문, if문 활용

# 수포자 삼인방
a = [1, 2, 3, 4, 5]
b = [2, 1, 2, 3, 2, 4, 2, 5] 
c = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] 

def solution(anss):
	# 무조건 len(anss)이상만 되도록 곱해주기
    a1 = [1, 2, 3, 4, 5] * (len(anss)//len(a)+1)
    b1 = [2, 1, 2, 3, 2, 4, 2, 5] * (len(anss)//len(b)+1)
    c1 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] * (len(anss)//len(c)+1)
    a_cnt = 0
    b_cnt = 0
    c_cnt = 0
    ans = []
    bin = []
   
    for i in range(len(anss)) : # anss 개수만큼
        if a1[i] == anss[i]:
            a_cnt += 1 # 5   
        if b1[i] == anss[i]:
            b_cnt += 1 # 0       
        if c1[i] == anss[i]:
            c_cnt += 1 # 0

 # 순서대로 bin에 append
    bin.append(a_cnt) #5
    bin.append(b_cnt) #0
    bin.append(c_cnt) #0
   
    if bin.count(max(bin)) == 1:
        max1 = bin.index(max(bin))
        ans.append(max1+1)
   
    elif bin.count(max(bin)) == 3 :    
            ans = [1, 2, 3]
           
    elif bin.count(max(bin)) == 2 : 
            if bin[0] == bin[1] :
                ans = [1, 2]
            elif bin[1] == bin[2] :
                ans = [2, 3]
            elif bin[0] == bin[2] :
                ans = [1, 3]    

    return ans

  • 🐱‍👤 무자비하게 코딩했더니 통과 ㅋㅋ 웃기다, 코드가 지저분하다!ㅋㅋ
    • 목적 : len(수포자 3인방 정답) > len(anss), 카운팅값 순서대로 bin에 append해서 비교
    • 배운 것
      for 문을 if문에 동일하게 적용하려면 if→if→if로 해야함
      elif로 하면 올바른 결과값이 나오지 않았음

풀이 2 : 하지만 깔끔한 코드를 보고 재도전, enumerate() 활용

def solution(answers):
    answer = []
    A = [1, 2, 3, 4, 5]
    B = [2, 1, 2, 3, 2, 4, 2, 5]
    C = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    score = [0, 0, 0]
   
    for idx, n in enumerate(answers):
        if n == A[idx%len(A)]:
            score[0] += 1
        if n == B[idx%len(B)]:
            score[1] += 1
        if n == C[idx%len(C)]:
            score[2] += 1
   
    for ind, s in enumerate(score):
        if s == max(score):
            answer.append(ind+1)
           
    return answer
profile
세상을 이롭게하는 AI Engineer

0개의 댓글