[프로그래머스] > 완전탐색 >모의고사

 

프로그래머스

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

programmers.co.kr

 

해당 문제는 패턴을 활용하고 index를 어떻게 구분짓는지 달렸다고 생각했다.

초기 코드는 정말 index를 일정하게 맞추는데 초점을 두었다.

def solution(answers):
    answer = []
    case1 = [1, 2, 3, 4, 5]
    case2 = [2, 1, 2, 3, 2, 4, 2, 5]
    case3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    count = [0, 0, 0]
    c1, c2, c3 = 0, 0, 0
    
    for i in range(len(answers)):
        
        
        if c1 >= len(case1):
            c1 = 0
            if case1[c1] == answers[i]:
                count[0]+=1
        else:
            if case1[c1] == answers[i]:
                count[0]+=1
                
        # print(c1)
        if c2 >= len(case2):
            c2 = 0
            if case2[c2] == answers[i]:
                count[1]+=1
        else:
            if case2[c2] == answers[i]:
                count[1]+=1
                
                
        if c3 >= len(case3):
            c3 = 0
            if case3[c3] == answers[i]:
                count[2]+=1
        else:
            if case3[c3] == answers[i]:
                count[2]+=1
        c1+=1
        c2+=1
        c3+=1
        # print(f"{i+1}회 완료")
    # print(count)
    
    for k in range(1, 4):
        if count[k-1] == max(count):
            answer.append(k)
    
            
        
    return answer
L = [1, 2, 3, 4, 5, 1, 3, 5, 2, 4]
print(solution(L))

 

이 코드에서 가장 비효율적인 것은 c1, c2, c3의 변수들을 계속 증가시키고 0으로 초기화 해주는 부분에 있다.

i % len(case1) 같은 코드를 활용하면 패턴 길이에 따라 달라지는 몫을 얻고 원하는 index값을 얻을 수 있다.

그럼으로 불필요한 c1, c2, c3변수를 삭제하고 코드를 간소화 했다.

for문에서 조건문을 넣으면서 if count[k-1] == max(count): 이런 방식으로 코딩해 조건문이 실행될 때마다 count 리스트의

최대값을 계속 계산했다. 변수에 할당하여 재사용 하는 방식으로 간소하지만 번거로운 작업을 줄일 수 있다.

def solution(answers):
    answer = []
    case1 = [1, 2, 3, 4, 5]
    case2 = [2, 1, 2, 3, 2, 4, 2, 5]
    case3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    count = [0, 0, 0]
    
    for i in range(len(answers)):
        if case1[i % len(case1)] == answers[i]:
            count[0] += 1
        if case2[i % len(case2)] == answers[i]:
            count[1] += 1
        if case3[i % len(case3)] == answers[i]:
            count[2] += 1
    
    
    max_count = max(count)  # max(count)를 한 번만 계산
    for k in range(1, 4):
        if count[k - 1] == max_count:
            answer.append(k)

    return answer

# 테스트 코드
L = [1, 2, 3, 4, 5, 1, 3, 5, 2, 4]
print(solution(L))

 

+ Recent posts