본문 바로가기
알고리즘 문제풀이/프로그래머스 고득점 Kit

[프로그래머스] 고득점 Kit - 완전 탐색

by summer_light 2023. 6. 22.

[내 풀이]
# 굳이 sizes 다시 정의할 필요 없이, min, max만 활용하면 됐다. 
def solution(sizes):
    sizes = [sorted(x) for x in sizes]
    garo = max([x[0] for x in sizes])
    sero = max([x[1] for x in sizes])
    return garo * sero

[참고 풀이]
def solution(sizes):
    return max(max(x) for x in sizes) * max(min(x) for x in sizes)

[내 풀이]
def solution(answers):
    score = [0, 0, 0]
    p1 = [1, 2, 3, 4, 5]
    p2 = [2, 1, 2, 3, 2, 4, 2, 5]
    p3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]

    for i, x in enumerate(answers):
        if p1[i % 5] == x:
            score[0] += 1
        if p2[i % 8] == x:
            score[1] += 1
        if p3[i % 10] == x:
            score[2] += 1

    return [i + 1 for i, x in enumerate(score) if x == max(score)]

[참고 풀이]
# len(pattern) 으로 5, 8, 10을 상수가 아닌 동일한 값인 len(pattern)으로 표현할 수 있기 때문에, 이를 활용하여 간결하게 작성 가능
def solution(answers):
    p = [[1, 2, 3, 4, 5],
         [2, 1, 2, 3, 2, 4, 2, 5],
         [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]]
    s = [0] * len(p)

    for q, a in enumerate(answers):
        for i, v in enumerate(p):
            if a == v[q % len(v)]:
                s[i] += 1
    return [i + 1 for i, v in enumerate(s) if v == max(s)]

 

[참고 풀이]
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)

[내 풀이]
maxCount = 0
def dfs(k, dungeons, count):
    global maxCount
    maxCount = max(maxCount, count)
    try:
        for i, dungeon in enumerate(dungeons):
            pilyo, somo = dungeon
            dungeons.pop(i)
            if k >= pilyo:
                dfs(k - somo, dungeons, count + 1)
            dungeons.insert(i, dungeon)
    except:
        print(k, dungeons, count)

def solution(k, dungeons):
    global maxCount
    maxCount = 0
    dungeons = sorted(dungeons)
    dfs(k, dungeons, 0)
    return maxCount

[참고 풀이]
maxCount = 0
N = 0
visited = []

def dfs(k, cnt, dungeons):
    global maxCount
    maxCount = max(maxCount, count)

    for j in range(N):
        if k >= dungeons[j][0] and not visited[j]:
            visited[j] = 1
            dfs(k - dungeons[j][1], cnt + 1, dungeons)
            visited[j] = 0


def solution(k, dungeons):
    global N, visited
    N = len(dungeons)
    visited = [0] * N
    dfs(k, 0, dungeons)
    return maxCount

visited[] 를 쓰는 쪽이 빠르겠다 싶었는데, 별로 차이가 나진 않았다. dungeons의 최대 길이가 8이라서 그런 것 같다. 

 

댓글