관리 메뉴

솜씨좋은장씨

[Programmers] 완전탐색 : 모의고사 (Python) 본문

Programming/코딩 1일 1문제

[Programmers] 완전탐색 : 모의고사 (Python)

솜씨좋은장씨 2020. 2. 22. 16:50
728x90
반응형

1일 1문제 16일차!

오늘의 문제는 프로그래머스의 완전탐색 : 모의고사 입니다.

 

 

코딩테스트 연습 - 모의고사 | 프로그래머스

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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,

programmers.co.kr

첫번째 시도

def solution(answers):
    answer = []
    
    tester_1 = [1, 2, 3, 4, 5]
    tester_2 = [2, 1, 2, 3, 2, 4, 2, 5]
    tester_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]    
    
    len_tester_1 = len(tester_1)
    len_tester_2 = len(tester_2)
    len_tester_3 = len(tester_3)
    
    check_1 = [0] * len_tester_1
    check_2 = [0] * len_tester_2
    check_3 = [0] * len_tester_3
    
    
    for i in range(len(answers)):
        if tester_1[i%len_tester_1] == answers[i]:
            check_1[i%len_tester_1] = check_1[i%len_tester_1] + 1

        if tester_2[i%len_tester_2] == answers[i]:
            check_2[i%len_tester_2] = check_2[i%len_tester_2] + 1
            
        if tester_3[i%len_tester_3] == answers[i]:
            check_3[i%len_tester_3] = check_3[i%len_tester_3] + 1
            
    right_dict = {1:sum(check_1), 2:sum(check_2), 3:sum(check_3)}
    
    right_dict = sorted(right_dict.items())
    
    for i in range(len(right_dict)):
        if right_dict[i][1] != 0:
            answer.append(right_dict[i][0])
    
    return answer

두번째 시도

def solution(answers):
    answer = []
    
    tester_1 = [1, 2, 3, 4, 5]
    tester_2 = [2, 1, 2, 3, 2, 4, 2, 5]
    tester_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]    
    
    len_tester_1 = len(tester_1)
    len_tester_2 = len(tester_2)
    len_tester_3 = len(tester_3)
    
    check_1 = [0] * len_tester_1
    check_2 = [0] * len_tester_2
    check_3 = [0] * len_tester_3
    
    
    for i in range(len(answers)):
        if tester_1[i%len_tester_1] == answers[i]:
            check_1[i%len_tester_1] = check_1[i%len_tester_1] + 1

        if tester_2[i%len_tester_2] == answers[i]:
            check_2[i%len_tester_2] = check_2[i%len_tester_2] + 1
            
        if tester_3[i%len_tester_3] == answers[i]:
            check_3[i%len_tester_3] = check_3[i%len_tester_3] + 1
            
    right_dict = {1:sum(check_1), 2:sum(check_2), 3:sum(check_3)}
    
    right_dict = sorted(right_dict.items())
    
    right_dict = sorted(right_dict, key=lambda x : (-x[1], x[0]))

    for i in range(len(right_dict)):
        if right_dict[i][1] != 0:
            answer.append(right_dict[i][0])
    
    return answer

앞에서 자꾸 왜 틀리나 잘 고민해보니

가장 많이 많은 사람만 답에 추가를 해야하는데 그냥 맞은 순서대로 list에 추가를 해서 문제가 되는 것이었습니다.

 

 

세번째 시도

def solution(answers):
    answer = []
    
    tester_1 = [1, 2, 3, 4, 5]
    tester_2 = [2, 1, 2, 3, 2, 4, 2, 5]
    tester_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]    
    
    len_tester_1 = len(tester_1)
    len_tester_2 = len(tester_2)
    len_tester_3 = len(tester_3)
    
    check_1 = 0
    check_2 = 0
    check_3 = 0
    
    
    for i in range(len(answers)):
        if tester_1[i%len_tester_1] == answers[i]:
            check_1 = check_1 + 1
            
            
        if tester_2[i%len_tester_2] == answers[i]:
            check_2 = check_2 + 1
            
            
        if tester_3[i%len_tester_3] == answers[i]:
            check_3 = check_3 + 1
            
            
    max_right = max(check_1, check_2, check_3)
        
    if max_right == check_1:
        answer.append(1)
    if max_right == check_2:
        answer.append(2)
    if max_right == check_3:
        answer.append(3)
    
    answer = sorted(answer)
    
    return answer

해당 부분을 수정해주니 이상없이 해결되었습니다.

 

 

SOMJANG/CODINGTEST_PRACTICE

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

 

Comments