모의고사
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.
코드
def solution(answers):
scores = []
n = len(answers)
random_numbers = ['12345', '21232425', '3311224455']
for guess in random_numbers:
result = (guess * (n//5+1))[:n]
scores.append(sum([int(i) == j for i, j in zip(result, answers)]))
answer = [i+1 for i, value in enumerate(scores) if value == max(scores)]
return answer
- result에 문제수 만큼 반복된 패턴의 제출답을 담아 zip으로 answers의 요소들과 비교
노트
iterable객체 vs iterator 객체
from itertools import cycle
def solution(answers):
scores = []
random_numbers = ['12345', '21232425', '3311224455']
for guesses in random_numbers:
guess = cycle(guesses)
scores.append(sum([int(i) == j for i, j in zip(guess, answers)]))
answer = [i+1 for i, value in enumerate(scores) if value == max(scores)]
return answer
- iterable객체는 반복 '가능한' 객체이고
- iterator는 반복 객체이다.
iter()와 next()
a = [1, 2, 3]
b = iter(a)
print(next(b))
print(next(b))
print(next(b))
# output
1
2
3
- 이터레이터 객체는 next()를 통해 요소를 불러올 수 있음
- iter()를 통해 iterable객체를 iterator로 만들 수 있음
itertools.cycle
a = cycle(guesses)
next(a)
- iterabel객체를 받아 iterator로 무한히 반복
- next()를 통해 요소를 받아 올 수 있음
zip(iterator, iterable) 을 사용하면 iterable의 길이만큼 생성
참조
023 상담원을 순서대로 배정하려면? ― itertools.cycle
itertools.cycle(iterable)은 반복 가능한 객체(iterable)를 순서대로 무한히 반복하는 이터레이터를 생성하는 함수이다. > 이터레이터란 next() 함수…
wikidocs.net
07-3 이터레이터와 제너레이터
다음은 늘 사용하던 리스트의 간단한 사용법이다. ```{.python} for a in [1, 2, 3]: print(a) ``` 리스트 [1, 2, 3]을 for 문…
wikidocs.net