[알고리즘] 완전탐색

Jzoo·2020년 7월 6일
0

완전탐색(exhaustive search)

무식하게 푼다(brute-force)는 컴퓨터의 빠른 계산 능력을 이용해
가능한 경우의 수를 일일이 나열하면서 답을 찾는 방법을 의미한다.
가능한 방법을 전부 만들어보는 알고리즘을 의미한다.

문제설명

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

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.


def solution(answers):
	first_supoja = [1,2,3,4,5]
    second_supoja = [2,1,2,3,2,4,2,5]
    third_supoja = [3,3,1,1,2,2,4,4,5,5]
    score = [0,0,0]
    result = []
    
    for idx,val in enumerate(answers):
    	if val == first_supoja[idx%len(first_supoja)]:
        	score[0] += 1
        if val == second_supoja[idx%len(second_supoja)]:
        	score[1] += 1
        if val == third_supoja[idx%len(third_supoja)]:
        	score[2] += 1
    
    for idx,answer in enumerate(score):
    	if answer == max(score):
        	result.append(idx+1)
    
    return result
처음에 first_supoja[idx] 시도했을때 testcase3개만 성공하고 나머지는 runtimeerror가 났다.
이유는 수포자들마다 순환주기가 다르기때문에
그래서 각각 순환주기로 나눠서 계산해줘야된다.
first_supoja[idx%len(first_supoja)]
profile
cheer-up!

0개의 댓글