algorithm 87

[백준 16194번] 카드 구매하기 2

n = int(input()) data = list(map(int,input().split())) p_count = len(data) dp = [[0]*(n+1) for _ in range(p_count+1)] for i in range(1,n+1): dp[1][i] = data[0]*i for i in range(2,p_count+1): for j in range(1,n+1): if i > j: dp[i][j] = dp[i-1][j] else: dp[i][j] = min(dp[i-1][j], data[i-1] + dp[i][j-i]) print(dp[p_count][n]) 이번 문제는 P1부터 PN까지 카드가 N개가 포함된 카드 팩의 가격이 주어졌을 때, N개의 카드를 구매하기 위해 지불해야 하는 금액..

Algorithm/DP 2023.05.04

[백준 1476번] 날짜 계산

E, S, M = map(int,input().split()) RESULT_RANGE = 15*28*19 + 1 for i in range(RESULT_RANGE): a, b, c = i%15 + 1, i%28 + 1, i%19 + 1 if E == a and S == b and M == c: print(i + 1) break 이번 문제는 E, S, M 이라는 수를 가지는 년도를 나타낼 때, 주어진 E, S, M으로 표시되는 가장 빠른 년도를 구하는 문제이다. 다만, 여기서 주의해야할 점은 세 수는 모두 서로 다른 범위를 가진다는 점이다. 이 문제의 풀이에 핵심은 '가능한 경우의 수를 모두 탐색해보는 완전 탐색, 즉 Brute Force 알고리즘을 사용해야 한다는 점'과 '나머지를 활용하여 값을 비교한다..

[백준 1107번] 리모컨

n = int(input()) m = int(input()) ans = abs(100 - n) if m != 0: # 고장난게 있을 경우만 인풋을 받음 broken = list(input().split()) else: broken = [] # 작은수에서 큰수로 이동할땐 500,000 까지만 보면 되지만 # 반대로 큰수에서 작은수로 내려올수도 있으므로 1,000,000 까지 봐야함 for i in range(1000001): for j in str(i): if j in broken: #해당 숫자 버튼이 고장난 경우 스탑 break else: # 번호를 눌러서 만들 수 있는 경우엔 ans = min(ans, len(str(i)) + abs(i - n)) #min(기존답, 숫자 버튼 클릭 수 + 해당 번호로부..

[백준 3085번] 사탕 게임

n = int(input()) array = [[] for _ in range(n)] nx = [-1,1,0,0] ny = [0,0,-1,1] for i in range(n): array[i] = list(input()) # 행에서 연속된 문자의 개수를 확인하는 함수 def row_check(x,y): count = 1 for i in range(y,n+1): if i == n-1: break if array[x][i] == array[x][i+1]: count += 1 else: break for i in range(y,-1,-1): if i == 0: break if array[x][i] == array[x][i-1]: count += 1 else: break return count # 열에서 연속된..

[BF] 브루스 포스 알고리즘의 개념

Brute Force 알고리즘이란 ? 복잡한 알고리즘을 굳이 생각하지않고, 컴퓨터의 빠른 연산력을 이용해 모든 경우를 전부 탐색하는 알고리즘을 의미합니다. brute force, BF, 완전탐색(exhaustive search), 완탐 정도로 불립니다. 최악의 경우라도 모든 경우를 컴퓨터로 살펴보기에 문제가 없다면 단순히 모든 경우를 살펴보면 됩니다. 단순히 모든 경우를 보는것도 하나의 알고리즘이라 할 수 있습니다. 결국 알고리즘으로 치자면 가장 쉬운 알고리즘이나, 활용 방법에 따라 최고의 효율을 보여줄 수 있는게 brute force 입니다. (컴퓨터로 적정한 시간내에 처리될 만한 수준의 데이터라면, 복잡하게 시간들여 생각할 것 없이 전부 탐색해보면 되기 때문) Brute Force 알고리즘의 종류 ..

[백준 2293번] 동전1

n, k = map(int,input().split()) # 1차원 DP 테이블을 사용한 풀이 prices = [0] * n for i in range(n): prices[i] = int(input()) # dp[i] -> i원을 만들 때 가능한 경우의 수 dp = [0 for _ in range(k+1)] # dp[0] -> 0원을 만들 때 가능한 경우의 수, 동전을 사용하지 않는 경우 이므로 1로 초기화 dp[0] = 1 for price in prices: for i in range(price,k+1): dp[i] = dp[i] + dp[i-price] print(dp[k]) # 2차원 DP 테이블를 사용한 풀이(시간초과) # prices = [0] * (n+1) # for i in range(1,..

Algorithm/DP 2023.04.11