본문 바로가기

개발/알고리즘

(64)
[프로그래머스] Level2_메뉴 리뉴얼 틀린 풀이 result_level = [] result = [] max_num = 0 def dfs(cnt, check, idx, count, orders): if cnt == count: calcul(check, orders) return for i in range(idx, len(check)): if not check[i]: check[i] = True dfs(cnt + 1, check, i, count, orders) check[i] = False def calcul(check, orders): global max_num test_str = "" count = 0 for i in range(len(check)): if check[i]: test_str += chr(65 + i) for o in or..
[프로그래머스] Level2_타겟 넘버 정답 코드 score = 0 number = [] target = 0 def dfs(sum, idx): global number, score, target if idx == len(number): if sum == target: score += 1 return 0 dfs(sum+number[idx], idx+1) dfs(sum-number[idx], idx+1) def solution(numbers, tar): global target, number number = numbers target = tar dfs(0, 0) return score 틀린 코드 result = [] def dfs(check, idx, cnt, nums, target): if cnt == len(nums): calcul(check..
[프로그래머스] 기능 개발_Python 문제 정답 코드 def solution(progresses, speeds): result = [] time = 0 count = 0 while len(progresses) > 0: if(progresses[0] + time * speeds[0]) >= 100: progresses.pop(0) speeds.pop(0) count += 1 else: if count > 0: result.append(count) count = 0 time += 1 result.append(count) return result 내가 처음 틀린 코드 def up_num(a, b): num1 = a / b num2 = a // b if num1 > num2: return num1 + 1 else: return num2 def so..
[백준 / Python]LCS_9251 보호되어 있는 글입니다.
[백준 / Python] 욕심쟁이 판다_1937 정답 코드 n = int(input()) data = [] dp = [[0 for _ in range(n)] for _ in range(n)] for _ in range(n): data.append(list(map(int, input().split()))) dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] def dfs(x, y): if dp[x][y]: return dp[x][y] dp[x][y] = 1 for i in range(4): nx, ny = x + dx[i], y + dy[i] if 0
[백준 / Python] 동전 1_2293 n, k = map(int, input().split()) data = [] for _ in range(n): data.append(int(input())) counts = [0 for _ in range(10001)] counts[0] = 1 for coin in data: for price in range(10001): if price >= coin: counts[price] += counts[price-coin] print(counts[k]) 이 문제는 전형적인 DP문제이다. DP에서는 분할정복과 같은 방법으로 문제를 작은 부분문제로 나눠서 풀고, 캐시하여 재사용될 때 활용해 해결하는 것이다. 왜 이전의 counts값을 더하는걸까? -> 가장 작은 단위의 부분 문제로 본다면, counts[price..
[백준 / Python] 차이를 최대로_10819 정답 코드 n = int(input()) check = [False for _ in range(n)] orders = [0 for _ in range(n)] data = list(map(int, input().split())) result = [] def dfs(idx): if idx == n: result.append(cal_solution()) return for i in range(n): if not check[i]: orders[idx] = i check[i] = True dfs(idx + 1) check[i] = False def cal_solution(): sum = 0 for i in range(n - 1): sum += abs(data[orders[i]] - data[orders[i + 1..
DP 동적 계획법 개념 DP(Dynamic Programing)은 직역하면 동적인 프로그래밍이다. 여기서 프로그래밍은 코드를 작성하는 행위를 뜻하는 것이 아니라, 테이블을 이용한다는 뜻을 의미한다. + 테이블을 이용한다가 무슨 뜻일까? DP에서는 이전의 값을 저장하여, 한번 구한 값은 다시 구하지 않는다. 이때의 저장하는 배열을 테이블이라고 하는 것 같다. 필요한 배경지식 DP는 왜 등장한 것일까? DP는 이전에 구했던 값을 활용하여 효율성을 증가시키기 위해 만들어진 것이다. 이를 조금 다르게 생각해 보면, 이전에 구했던 값을 반복해 구하는 상황에서, 이러한 비효율적인 문제를 해결하기 위해 나온 것이라고 볼 수 있다. 흔히 DP는 트리를 그리는 것과 흡사하다고 한다. 왜 트리를 그리는 것과 흡사할까? 이를 좀 더 쉽게 이해하기..