728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42840
코드
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))
'자료구조&알고리즘 > 프로그래머스' 카테고리의 다른 글
[PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 (0) | 2024.12.22 |
---|---|
[Python] 소수찾기 - 완전탐색 (0) | 2024.02.15 |
[Python] 최소 직사각형 - 완전탐색 (0) | 2024.02.14 |
[Python] H_Index - 정렬 (0) | 2024.02.13 |
[Python] 가장 큰 수 - 정렬 (0) | 2024.02.13 |