본문 바로가기

알고리즘

(5)
[BOJ] - 브루트 포스 - (1) - Python 2798: 블랙잭 # 2798: 블랙잭 # 내풀이 from itertools import combinations import sys n , m = map(int, sys.stdin.readline().split()) cards = list(map(int, sys.stdin.readline().split())) sums = list(map(sum, combinations(cards, 3))) result = [] for i in sums : if i m): continue else: ans = max(ans, cards[i] + cards[j] + cards[k]) print(ans) ####################################################################..
[BOJ] - 기본 수학 1 - (2) - Python 2869: 달팽이는 올라가고 싶다 import sys a, b, v = map(int, input().split()) counts = 1 if (v-a) / (a-b) == (v-a) // (a-b) : counts += ((v-a) // (a-b)) print(counts) else : counts += ((v - a) // (a - b)) + 1 print(counts) 10250: ACM 호텔 T = int(input()) for _ in range(T): H, W, N = map(int, input().split()) row = 1 col = 1 for _ in range(N-1): row += 1 if row > H : row = 1 col += 1 else : continue print(row..
[알고리즘] - 동적계획법 (Dynamic programming) 다이나믹 프로그래밍 (Dynamic Programming) - 동적 계획법 이라고도 말함 - 한 문제는 한 번만 풀도록 하는 알고리즘 - 상당수 분할 정보 기법은 동일한 문제를 다시 푼다는 단점 (피보나치 수열 예시) ㄴ 반복적으로 불필요한 계산을 해야한다는 단점 가정 1. 큰 문제를 작은 문제로 나눌 수 있다. 2. 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다. 이미 구한 답을 잠시 기억해두는 것을 '메모이제이션(Memoization) C언어 예시 ----------------------- #include int dp(int x) { if(x == 1) return 1; if(x == 2) return 1; return dp(x - 1) + dp(x - 2); } int main(..
[알고리즘] - 그리디 알고리즘 (Greedy Algorithm) 1. 그리디 알고리즘이란? 매 선택에서 최적화된 정답을 찾아 적합한 선택을 하는 알고리즘을 말합니다. 2. 예시 거스름돈 문제 500원, 100원, 10원짜리 동전이 각각 있고 N원 거슬러준다고 할 때, 가장 적은 동전의 개수를 거슬러주는 경우의 수는? (단, 거스름돈은 반드시 10의 배수) 예 ) 1220원 => 큰단위 동전부터 거스름돈을 채워나가는 것이 적절 500원 100원 10원 2 2 2 가장 적은 동전의 개수는 6개. # 그리디 알고리즘 기본 예제 # 거스름 돈 n = input() n = int(n) count = 0 # 돈을 거슬러주는 횟수 # 큰 화폐단위부터 차례대로 확인하기 money = [500, 100, 10] for coin in money : count += n // coin #..
[코드업 기초 100제] - 성실한 개미 문제 - Python 꾸준히 하루에 한문제씩 풀면서 코드업 기초 100제를 마무리 했습니다. 성실한 개미 문제가 제일 오래걸렸네요. 확실히 머신러닝이나 데이터분석과는 다르게 직접 코딩하면서 알고리즘 짜는 것이 저한테는 많이 어려웠습니다. 이번 문제는 특히 파이썬에서는 잘 돌아갔는데, 코드업 사이트 내 테스트케이스에서 계속 아웃풋이 안나와서 처음 입력하는 코드를 바꿨더니 잘 출력이 되었습니다. # 최종정답 maze = [] for i in range(10): m = [int(x) for x in input().split()] maze.append(m) i = 1 j = 1 while True : if maze[i][j] == 2 : maze[i][j] = 9 break elif maze[i+1][j] == 1 and maze[..