자료구조&알고리즘/프로그래머스

[Python] 모의고사 - 완전탐색

두잇 두두 2024. 2. 15. 21:51
728x90

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

코드

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]
    
    scores = [0, 0, 0]

    for i, answer in enumerate(answers):
        if answer == pattern1[i % len(pattern1)]:
            scores[0] += 1
        if answer == pattern2[i % len(pattern2)]:
            scores[1] += 1
        if answer == pattern3[i % len(pattern3)]:
            scores[2] += 1
    
    max_score = max(scores)            
    winners = [i+1 for i, score in enumerate(scores) if score==max_score]
        
    return winners

 

패턴을 받아와서 %를 통해 해당 패턴과 answer이 일치하는 지 여부를 판단하는 함수입니다

 

다른 사람 코드

 

from itertools import cycle

def solution(answers):
    giveups = [
        cycle([1,2,3,4,5]),
        cycle([2,1,2,3,2,4,2,5]),
        cycle([3,3,1,1,2,2,4,4,5,5]),
    ]
    scores = [0, 0, 0]
    for num in answers:
        for i in range(3):
            if next(giveups[i]) == num:
                scores[i] += 1
    highest = max(scores)

    return [i + 1 for i, v in enumerate(scores) if v == highest]

 

 

 

접근법

 

 

 

 

 

배운 점

cycle(iterable): 주어진 iterable의 원소들을 무한히 반복하는 이터레이터를 생성합니다.
next(iterator[, default]): 이터레이터에서 다음 값을 가져옵니다. 이 함수를 호출할 때마다 이터레이터에서 다음 원소를 반환하며, 더 이상 원소가 없을 경우 StopIteration 예외가 발생합니다. 두 번째 매개변수 default를 제공하면 이터레이터에서 원소가 더 이상 없을 때 해당 값을 반환합니다.

from itertools import cycle

nums = [1, 2, 3, 4, 5]
cyclic_iter = cycle(nums)

for _ in range(10):
    print(next(cyclic_iter))