프로그래머스-모의고사

Dongwon Ahn·2020년 8월 21일
0

알고리즘 공부

목록 보기
8/8

문제


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

고민 🧐

  • 1번은 1,2,3,4,5 순서로
    2번은 2,1,2,3,2,4,2,5
    3번은 3,3,1,1,2,2,4,4,5,5 순서로 문제를 찍으니깐 미리 최대 10,000문제를 만들어서 비교하면 어떤가?

코드 순서 🤔

  1. 1번, 2번, 3번의 10000문제 기준으로 답안지를 미리 만들자
  • 정확히 10000문제를 하는 것 보다 2의 12승을 하는 것이 빠를꺼 같아서 아래와 같이 해봤습니다.
    one_case = [1, 2, 3, 4, 5]
    two_case = [2, 1, 2, 3, 2, 4, 2, 5]
    three_case = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    for _ in range(12):
        one_case += one_case
        two_case += two_case
        three_case += three_case
  1. 그 다음 답안지와 비교하여 몇개 맞았는지 체크하자
    for num, test in enumerate(answers):
        if one_case[num] == test:
            one += 1
        if two_case[num] == test:
            two += 1
        if three_case[num] == test:
            three += 1

전체 코드 😀

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

def solution(answers):
    one, two, three = 0, 0, 0
    one_case = [1, 2, 3, 4, 5]
    two_case = [2, 1, 2, 3, 2, 4, 2, 5]
    three_case = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    for _ in range(12):
        one_case += one_case
        two_case += two_case
        three_case += three_case

    for num, test in enumerate(answers):
        if one_case[num] == test:
            one += 1
        if two_case[num] == test:
            two += 1
        if three_case[num] == test:
            three += 1
    correct = max(one, two, three)
    answer = []
    if correct == one:
        answer.append(1)
    if correct == two:
        answer.append(2)
    if correct == three:
        answer.append(3)

    return answer

다른 사람 풀이

  • 문제 풀이 이후 다른 사람 풀이 중 감동적이라 공부하기 위해 적어봅니다.
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
profile
Typescript를 통해 풀스택 개발을 진행하고 있습니다.

0개의 댓글