개발자식

[프로그래머스] 모의고사 본문

Algorithm/Programmers

[프로그래머스] 모의고사

밍츠 2022. 7. 1. 01:47

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

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

 

 

나의 풀이

- answer 과 각 수포자의 방식 패턴 길이를 비교하여 따로 처리하는 방식

- answer 길이가 짧다면 부족한 만큼 인덱싱 후 더해주기

- 수포자의 방식 패턴 길이가 짧다면 부족한 만큼 리스트 만들어서 진행

def solution(answers):
    answer = []
    
    p1 = [1,2,3,4,5]
    p2 = [2,1,2,3,2,4,2,5]
    p3 = [3,3,1,1,2,2,4,4,5,5]
    
    p = [p1,p2,p3]
    check ={}
    
    for i in range(len(p)):
        count = 0
        if len(answers) <= len(p[i]):
            for a, j in zip(answers, p[i]):
                if a==j:
                    count+=1
            check[i+1] = count
        else:
            mul = len(answers) // len(p[i])
            add = len(answers) % len(p[i])
            
            for a, j in zip(p[i]*mul+p[i][:add], answers):
                if a==j:
                    count+=1
            check[i+1] = count
            
    answer=[k for k,v in check.items() if max(check.values()) == v]         
                    
    
    
    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

리스트로 문제를 풀 때 인덱싱을 한번 더 생각해보자

Comments