본문 바로가기
Algorithm/프로그래머스 고득점 Kit

[프로그래머스] 고득점Kit (5) - 완전탐색 (파이썬)

by _temp 2022. 3. 4.

1. 모의고사 (Lv. 1)

# 모의고사
def solution(answers):
    answer = []
    one = [1, 2, 3, 4, 5]
    two = [2, 1, 2, 3, 2, 4, 2, 5]
    thr = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    one = one*(len(answers)//len(one)) + one[:(len(answers) % len(one))]
    two = two*(len(answers)//len(two)) + two[:(len(answers) % len(two))]
    thr = thr*(len(answers)//len(thr)) + thr[:(len(answers) % len(thr))]

    result = [0, 0, 0]
    for i in range(len(answers)):
        if one[i] == answers[i]:
            result[0] += 1
        if two[i] == answers[i]:
            result[1] += 1
        if thr[i] == answers[i]:
            result[2] += 1

    answer = [i+1 for i in range(len(result)) if result[i] == max(result)]
    return answer

 

one, two, three 학생들이 찍는 방법을 모두 답안지(answers) 길이에 맞춰준다.

이후 완전 탐색을 해서 맞춘 개수의 최댓값과 같은 학생의 번호를 answer로 초기화


2. 소수 찾기 (Lv. 2)

# 소수 찾기
import math
from itertools import permutations as perm


def solution(numbers):
    arr = set()
    for x in range(1, len(numbers)+1):
        temp = set(perm(numbers, x))
        for x in temp:
            str = ''.join(x)
            number = int(str)
            arr.add(number)
    answer = 0
    for x in arr:
        if check(x):
            answer += 1
    return answer


def check(number):
    if number == 0 or number == 1:
        return False
    for x in range(2, int(math.sqrt(number))+1):
        if number % x == 0:
            return False
    return True

 

permutations를 이용해서 모든 경우의 수를 구하고, 집합(set)의 성질을 이용해서 중복되는 값을 걸러준다.

이후 결과물인 집합을 돌면서 소수 판별 (check : 2부터 제곱근까지 나눈 수가 0이 아니면 소수)


3. 카펫 (Lv. 2)

# 카펫
def solution(brown, yellow):
    answer = []
    for i in range(2, brown, 2):
        row = (brown - i) // 2
        column = i // 2 + 2
        if row < column:
            break
        temp = (row-2) * (column-2)
        if temp > 0 and temp == yellow:
            answer = [row, column]
    return answer

 

리스트의 row와 column의 특징을 이용 : brown의 값을 이용하여 row, column을 설정

row < column이면, 문제의 조건에 따라 break

테두리의 한줄을 뺀 내부의 넓이(row-2 * column-2)가 yellow와 같다면 answer = [row, column]