stem_sw 2024. 9. 13. 12:11
 

프로그래머스

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

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의 길이만큼 생성

 

 

 

 

참조


https://wikidocs.net/108925

 

023 상담원을 순서대로 배정하려면? ― itertools.cycle

itertools.cycle(iterable)은 반복 가능한 객체(iterable)를 순서대로 무한히 반복하는 이터레이터를 생성하는 함수이다. > 이터레이터란 next() 함수…

wikidocs.net

https://wikidocs.net/184211

 

07-3 이터레이터와 제너레이터

다음은 늘 사용하던 리스트의 간단한 사용법이다. ```{.python} for a in [1, 2, 3]: print(a) ``` 리스트 [1, 2, 3]을 for 문…

wikidocs.net