본문 바로가기

두두의 알고리즘/문제

[완전탐색] 프로그래머스 L1 '모의고사' (Python)

728x90

<문제 링크>

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

 

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

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

programmers.co.kr


<문제 풀이>

  1. 반복문 사용.
  2. 패턴을 answers 길이에 맞춤. 문제가 1개~10,000개일 경우 계산
  3. 채점할 수 있는 변수 필요.
  4. 가장 많이 맞춘 사람 걸러내기

<코드>

#1차 시도 --> 몇개의 테스트케이스 실패
def solution(answers):
    answer = []
    a1, a2, a3 = [],[],[]
    
    j=1
    for i in answers:
        if i==j:
            a1.append(i)
        if j==6:
            j=1
        j+=1
        
    j=1
    for idx, i in enumerate(answers):
        if idx%2==0:
            k=2
        else:
            k=j
            j+=1
        if i==k:
            a2.append(i)
      
    su3 = [3,3,1,1,2,2,4,4,5,5]
    if len(answers)>len(su3):
        len_ = len(answers) - len(su3)
        for a in range(0,len_):
            su3.append(su3[a])
    for idx, i in enumerate(answers):
        if i==su3[idx]:
            a3.append(i)
    
    #print("{}{}{}".format(a1,a2,a3))
    if len(a1)>len(a2) and len(a1)>len(a3):
        answer = [1]
    elif len(a2)>len(a1) and len(a2)>len(a3):
        answer = [2]
    elif len(a3)>len(a1) and len(a3)>len(a2):
        answer = [3]
    elif len(a1)==len(a2)==len(a3):
        answer = [1,2,3]
    elif len(a1)==len(a2):
        answer = [1,2]
    elif len(a1)==len(a3):
        answer = [1,3]
    elif len(a2)==len(a3):
        answer = [2,3]
    
    return answer

 

#2차 시도 성공
def solution(answers):
    answer = []
    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]
    cnt = [0,0,0]
    
    pattern1 = pattern1 * (int(len(answers)/len(pattern1))+1)
    pattern2 = pattern2 * (int(len(answers)/len(pattern2))+1)
    pattern3 = pattern3 * (int(len(answers)/len(pattern3))+1)
    
    for i in range(len(answers)):
        if answers[i]==pattern1[i]:
            cnt[0] += 1
        if answers[i]==pattern2[i]:
            cnt[1] += 1
        if answers[i]==pattern3[i]:
            cnt[2] += 1
    for i in range(len(cnt)):
        if cnt[i] == max(cnt):
            answer.append(i+1)

    return answer

 

<고쳐야 할 점>

  • 배열[idx]을 꼭 for문의 idx로 쓸 필요는 없다.