[알고리즘]STEP 1-2주차 완전탐색/이분탐색(모의고사)

sunnwave·2022년 7월 28일
0

알고리즘

목록 보기
36/47
post-thumbnail

👼🏻복습링크

모의고사

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

1️⃣ 첫번째 풀이

❗ 완전탐색 문제로 수포자1,2,3의 답과 answers의 답을 일일이 대조하여 결과를 도출함
👉🏻 수포자들의 정답 리스트를 만드는 과정이 어설픈 것 같음...

def solution(answers):
    answer = []
    
    su_1=[1, 2, 3, 4, 5]*2000
    su_2=[2, 1, 2, 3, 2, 4, 2, 5]*2000
    su_3=[3, 3, 1, 1, 2, 2, 4, 4, 5, 5]*2000
    
    su_1=su_1[:len(answers)]
    su_2=su_2[:len(answers)]
    su_3=su_3[:len(answers)]
    
    cnt=[0,0,0]
    for i in range(len(answers)):
        if answers[i]==su_1[i]:
            cnt[0]+=1
        if answers[i]==su_2[i]:
            cnt[1]+=1
        if answers[i]==su_3[i]:
            cnt[2]+=1
    

    for i in range(len(cnt)):
        if cnt[i]==max(cnt):
            answer.append(i+1)
        
    return answer
  1. su_1, su_2, su_3을 수포자1, 수포자2, 수포자3 각각의 찍는 방식으로 리스트를 선언(최대 길이가 10000이므로 *2000을 함)
  2. su_1, su_2, su_3을 answers의 길이만큼 slicing
  3. cnt=[0,0,0]을 선언. cnt는 각 학생이 맞춘 문제의 개수를 저장하는 리스트. 수포자_i가 맞춘 문제의 개수는 cnt[i-1]
  4. 첫 번째 for 문 answers의 길이만큼 반복
    • 수포자들이 맞춘 문제의 개수를 구하는 for문
    • answers[i]와 su_1[i], su_2[i], su_3[i]를 비교하여 같으면 cnt+=1
  5. 두 번째 for 문 cnt 길이만큼 반복
    • 문제를 가장 많이 맞춘 수포자를 구하는 for문
    • cnt[i]값이 cnt의 최대값이면 answer.append(i+1)

2️⃣ 두번째 풀이

❗ 다른 사람 풀이 참조 : 기본적인 풀이는 비슷하지만 cycle을 통해 수포자들의 답안 리스트 만들기,for 문에서 zip 이용

from itertools import cycle 
su_1=cycle([1,2,3,4,5])
su_2=cycle([2,1,2,3,2,4,2,5])
su_3=cycle([3,3,1,1,2,2,4,4,5,5])
#리스트의 일정 패턴을 무한히 순환함
next(cycle)로 cycle의 원소 순회
from itertools import cycle 

def solution(answers):
    answer = []
    su_1=cycle([1,2,3,4,5])
    su_2=cycle([2,1,2,3,2,4,2,5])
    su_3=cycle([3,3,1,1,2,2,4,4,5,5])
    
    cnt=[0,0,0]
    
    for i, su1, su2, su3 in zip(answers, su_1, su_2, su_3):
        if i==su1:
            cnt[0]+=1
        if i==su2:
            cnt[1]+=1
        if i==su3:
            cnt[2]+=1

    for i in range(len(cnt)):
        if cnt[i]==max(cnt):
            answer.append(i+1)
        
    return answer
  1. su_1, su_2, su_3의 패턴을 cycle로 무한히 순회하도록 변환
  2. cnt=[0,0,0]을 선언. cnt는 각 학생이 맞춘 문제의 개수를 저장하는 리스트. 수포자_i가 맞춘 문제의 개수는 cnt[i-1]
  3. 첫 번째 for문
    • 수포자들이 맞춘 문제의 개수를 구하는 for문
    • zip을 이용하여 su_1, su_2, su_3의 값 한번에 불러오기
    • answer의 값과 비교하여 같으면 cnt[i]+=1
  4. 두 번째 for 문 cnt 길이만큼 반복
    • 문제를 가장 많이 맞춘 수포자를 구하는 for문
    • cnt[i]값이 cnt의 최대값이면 answer.append(i+1)
profile
조구마한 개발 기록 블로그

0개의 댓글

관련 채용 정보