프로그래머스 고득점 Kit(Python) - 5. 완전탐색

안예진·2021년 5월 15일

programmersKit

목록 보기
5/5
post-thumbnail

완전탐색

모의고사

sCorrect에 맞은 점수를 넣기
sCorrect를 for문을 돌면서 제일 큰점수만 들어가게 세팅

def solution(answers):
    answer = []
    sAnswer = [[1, 2, 3, 4, 5], [2, 1, 2, 3, 2, 4, 2, 5], [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]]
    sLength = [5, 8, 10]
    sCorrect = [0,0,0]
    
    for idx, a  in enumerate(answers):
        for sIdx in range(3):
            if sAnswer[sIdx][idx%sLength[sIdx]]==a:
                sCorrect[sIdx] += 1
    maxVal=0
    
    for number, s in enumerate(sCorrect,1):
        if maxVal < s:
            maxVal = s
            answer = [number]
        elif maxVal == s:
            answer.append(number)
    
    return answer

소수 찾기

findNum : 가능한 숫자조합을 찾는다
가능한 숫자들 중 소수만 real_answer에 넣어 답으로 리턴한다

def solution(numbers):
    answer = []
    real_answer = set()

    def findNum(numbers, num, start):
        if start == len(numbers):
            if len(num) != 0 and num !=['1'] and num !=['0']:
                answer.append(num)
        else:
            findNum(numbers, num, start + 1)
            num_copy = []
            for x in num:
                num_copy.append(numbers[start] + x)
                for l in range(1, len(x)):
                    num_copy.append(x[:l] + numbers[start] + x[l:])
                num_copy.append(x + numbers[start])
            else:
                num_copy.append(numbers[start])
            findNum(numbers, num_copy, start + 1)

    findNum(numbers, [], 0)
    
    for x in answer:
        for num in x:
            test = 3
            if int(num) ==2:
                real_answer.add(int(num))
                continue
            elif int(num)<2 or int(num)%2 == 0:
                continue
            else: 
                while test < int(num):
                    if int(num) % test == 0:
                        break
                    else:
                        test += 2
                if test == int(num):
                    real_answer.add(int(num))
	return len(real_answer)
  • 다른사람의 풀이
from itertools import permutations
def solution(n):
    a = set()
    for i in range(len(n)):
        a |= set(map(int, map("".join, permutations(list(n), i + 1))))
    a -= set(range(0, 2))
    for i in range(2, int(max(a) ** 0.5) + 1):
        a -= set(range(i * 2, max(a) + 1, i))
    return len(a)

카펫

(yellow가로+2)(yellow세로+2) = brown+yellow 임을 활용한다

def solution(brown, yellow):
    answer = []
    
    total = brown + yellow
    
    for x in range(1,total):
        if not yellow % x:
            col = int(yellow/x)
            if (col+2) * (x+2) ==total:
                return [max(x+2, col+2), min(x+2, col+2)]

profile
에국은 에구구구...

0개의 댓글