프로그래머스 LV1 모의고사(완전 탐색)

프로그래머스 LV1 모의고사(완전 탐색)

2021, Mar 31    

프로그래머스 lv1 모의고사(완전 탐색)

cycle() 무한 이터레이터. 예시cycle('ABCD') --> A B C D A B C D ...


풀이

from itertools import cycle

def solution(answers):
    winner = []
    pattern_supo_1 = [1 ,2, 3, 4, 5]
    pattern_supo_2 = [2, 1, 2, 3, 2, 4, 2, 5]
    pattern_supo_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    score_supo = [0, 0, 0]
    
    for supo_1, supo_2, supo_3, answer in zip(cycle(pattern_supo_1), cycle(pattern_supo_2), cycle(pattern_supo_3), answers):
        if supo_1 == answer: score_supo[0] += 1
        if supo_2 == answer: score_supo[1] += 1
        if supo_3 == answer: score_supo[2] += 1
    
    for i, score in enumerate(score_supo):
        if score == max(score_supo):
            winner.append(i+1) 
    return winner

if __name__ == '__main__':
    answers = [1,2,3,4,5]
    print(solution(answers))
# 다른 사람 풀이

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

    for idx, answer in enumerate(answers):
        if answer == pattern1[idx%len(pattern1)]:
            score[0] += 1
        if answer == pattern2[idx%len(pattern2)]:
            score[1] += 1
        if answer == pattern3[idx%len(pattern3)]:
            score[2] += 1

    for idx, s in enumerate(score):
        if s == max(score):
            result.append(idx+1)

    return result
  • 위 코드는 인덱스를 쓰는 법이 재밌었음. pattern1[idx%len(pattern1)] 이러면 인덱스 숫자랑 pattern1의 길이의 나머지의 인덱스인데..
    예를 들어서 patter1의 길이가 5라고 치면. 5로 0을 나눈 나머지. 1도 그렇게. 그런데 그 길이를 넘어서는 길이가 되면. 예를 들어 6이면.
    다시 5로 나누면 인덱스를 처음부터 해줄 수 있다. 인덱스를 잘 써서 cycle을 쓰지 않고 풀어냄.
# 다른 사람 풀이2

def solution(answers):
    p = [[1, 2, 3, 4, 5],
         [2, 1, 2, 3, 2, 4, 2, 5],
         [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]]
    s = [0] * len(p)

    for q, a in enumerate(answers):
        for i, v in enumerate(p):
            if a == v[q % len(v)]:
                s[i] += 1
    return [i + 1 for i, v in enumerate(s) if v == max(s)]

if __name__ == '__main__':
    answers = [1,2,3,4,5]
    print(solution(answers))
  • 여기서도 q % len(v) 를 통해서 cycle을 인덱스로 해결하는 방법을 썼다.
    풀이 1과 다른점은 return 에 리스트 컴프리헨션을 사용한 것, 앞에 패턴을 리스트화 시킨 것.

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges