Python 코딩테스트-완전탐색
Brute Force
<프로그래머스 고득점kit>
def solution(answers): count_1=0 #1번학생의 점수 count_2=0 #2번학생의 점수 count_3=0 #3번학생의 점수 # array_1=[1,2,3,4,5] #1번학생의 패턴 array_2=[2,1,2,3,2,4,2,5] #2번학생의 패턴 array_3=[3,3,1,1,2,2,4,4,5,5] #3번학생의 패턴 # length_1=len(array_1) length_2=len(array_2) length_3=len(array_3) # idx_1=0 #1번학생의 정답과 비교할 인덱스 idx_2=0 #2번학생의 정답과 비교할 인덱스 idx_3=0 #3번학생의 정답과 비교할 인덱스 # for v in answers: if(array_1[idx_1%length_1]==v): #%length_1은 정답패턴끝까지갈때 처음부터 다시 반복을 위한 연산 count_1+=1 if(array_2[idx_2%length_2]==v): count_2+=1 if(array_3[idx_3%length_3]==v): count_3+=1 idx_1+=1 idx_2+=1 idx_3+=1 result=[count_1,count_2,count_3] #학생들의 점수결과리스트 max_score=max(result) #최고점수추출 student_result=[] for i,v in enumerate(result): if(max_score==v): student_result.append(i+1) #최고점수와 같다면 학생의 번호를 모두 추출 student_result.sort() return student_result
<해설>
각학생의 정답패턴의 길이가 다르기때문에 문제를 순회시에 각자의 정답패턴을 처음부터 다시 반복하게할 인덱스들을 각각 다르게 설계 후 각 학생의 점수를 모으면 최고점만 뽑고 그것과 같은 학생들은 모두 추출
from itertools import permutations #순열을 뽑기위한 라이브러리 def is_prime_number(x): #소수판별 함수 if(x==1 or x==0): return False for i in range(2, int(x/2)+1): # x가 해당 수로 나누어떨어지면 if x % i == 0: return False return True # def solution(numbers): list_string=list(numbers) #permutations는 리스트형을 인자로가지기 때문에 변환 "011"=>['0', '1', '1'] tuple_result=[] for i in range(len(numbers)): tuple_result+=list(permutations(list_string, i+1)) #[('0',), ('1',), ('1',), ('0', '1'), ('0', '1'), ('1', '0'), ('1', '1'), ('1', '0'), ('1', '1'), ('0', '1', '1'), ('0', '1', '1'), ('1', '0', '1'), ('1', '1', '0'), ('1', '0', '1'), ('1', '1', '0')] result=[] for i in tuple_result: #i는 차례로('0',), ('1',), ('1',), ('0', '1'), ('0', '1').... word='' for c in i: word+=c result.append(word) #최종 result안에는 '0', '1', '1', '01', '01', '10', '11', '10', '11', '011', '011', '101', '110', '101', '110' for i,v in enumerate(result): result[i]=int(v) #각 리스트원소를 정수로 변환 # #정수변환 마친 result에는 [0, 1, 1, 1, 1, 10, 11, 10, 11, 11, 11, 101, 110, 101, 110] result=list(set(result)) #중복제거 마친 result에는 [0, 1, 101, 10, 11, 110] # print(result) count=0 //소수의 갯수 for i in result: if(is_prime_number(i)): count+=1 return count
<해설>
'011'이라는 문자열이 주어질 때 각원소로 중복없이 모든 조합을 구할줄 알고 그 모든 수들을 소수인지 판별 후 갯수를 세어간다
def middle_length(row,col): #가로,세로가 주어지면 가운데 길이구하는 함수 return ((row-2)*(col-2)) # def row_col(brown): #brown이 어지면 모든 가로,세로 조합들을 구하는 공식 result=[] for r in range(3,brown): for c in range(3,r+1): if((r*2)+(c*2)-4==brown): result.append([r,c]) return result # def solution(brown, yellow): result=row_col(brown) #brown이 24일 경우->[[7, 7], [8, 6], [9, 5], [10, 4], [11, 3]] for r,c in result: if(middle_length(r,c)==yellow): #조합으로 나온 yellow값들과 같아면 추출! return [r,c]
<해설>
brown이 주어질때 가로,세로로 나올수 있는 모든 조합을 구하며 그 조합들로 yellow값을 만드는 공식으로 나온 결과가 정답에 주어진 yellow와 같으면 반환
Author And Source
이 문제에 관하여(Python 코딩테스트-완전탐색), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tjwjdgus83/Python-코딩테스트-완전탐색저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)