다이나믹 프로그래밍 71

백준(Python) 9095번 1, 2, 3 더하기 풀이

Python으로 구현한 9095번 1, 2, 3 더하기 문제 풀이입니다. https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net tc = int(input()) data = [1, 2, 4] for i in range(3, 10) : data.append(data[i-1] + data[i-2] + data[i-3]) for i in range(tc) : n = int(input()) print(data[n-1]) 반복문을 통해 data 리스트의 이전 3개의 값들을 더한 값을 리스트에 추가한다. 출력 시에는 리스트의 인덱스가 0부터 시작되기 때문에 d..

백준(Python) 1463번 1로 만들기 풀이

Python으로 구현한 1463번 1로 만들기 문제 풀이입니다. https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net n = int(input()) dp = [0] * (n + 1) for i in range(2, n + 1) : dp[i] = dp[i - 1] + 1 if i % 3 == 0 : dp[i] = min(dp[i], dp[i // 3] + 1) if i % 2 == 0 : dp[i] = min(dp[i], dp[i // 2] + 1) print(dp[n]) 1. n이 3으로 나누어 떨어지면, 3으로 나눈다. 2. n이 2로 나누어 떨어지면, 2로 나..

백준(Python) 2407번 조합 풀이

Python으로 구현한 2407번 조합 문제 풀이입니다. https://www.acmicpc.net/problem/2407 2407번: 조합 n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n) www.acmicpc.net n, m = map(int, input().split()) value = 1 value2 = 1 for i in range(n, n-m, -1) : value *= i for i in range(2, m + 1) : value2 *= i print(value // value2) 문제에서 요구한 바와 같이 nCm 을 구하여 출력한다. 첫번째 반복문은 n부터 n-m 전까지 곱한 코드이며, 두번째 반복문은 2부터 m 까지 곱한 코드이다. 최종적으로 value를 ..

백준(Python) 9655번 돌 게임 풀이

Python으로 구현한 9655번 돌 게임 문제 풀이입니다. https://www.acmicpc.net/problem/9655 9655번: 돌 게임 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. www.acmicpc.net n = int(input()) count = 0 while n > 0 : count += 1 if n >= 3 : n -= 3 else : n -= 1 if count % 2 == 0 : print("CY") else : print("SK") 기본적으로 돌 게임을 하는 사람 수는 두 명이고, 상근이가 먼저 시작하기 때문에 홀수번째 차례는 상근이가 되고, 짝수번째 차례는 창영이가 된다. 그렇기 때문에 반복문 내에서 한 차례가 진행될 때마다 count를 1증가시..

백준(Python) 11051번 이항 계수2 풀이

Python으로 구현한 11051번 이항 계수 2 문제 풀이입니다. https://www.acmicpc.net/problem/1009 1009번: 분산처리 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000) www.acmicpc.net def factorial(x) : result = 1 for i in range(2, x + 1) : result *= i return result n, k = map(int, input().split()) value = factorial(n) // (factorial(n-k) * factorial(k)) print(value % 10007..

백준(Python) 1010번 다리 놓기 풀이

Python으로 구현한 1010번 다리 놓기 문제 풀이입니다. https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net tc = int(input()) def factorial(x) : count = 1 for i in range(2, x + 1) : count *= i return count for _ in range(tc) : a, b = map(int, input().split()) result = factorial(b) // (factorial(..

백준(Python) 2748번 피보나치 수 2 풀이

Python으로 구현한 2748번 피보나치 수 2 문제 풀이입니다. https://www.acmicpc.net/problem/2748 2748번: 피보나치 수 2 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net data = [0] * 91 def fibo(x) : if x == 0 : return 0 if x == 1 or x == 2 : return 1 if data[x] != 0 : return data[x] data[x] = fibo(x - 1) + fibo(x - 2) return data[x]..

백준(Python) 10870번 피보나치 수 5

Python으로 구현한 10870번 피보나치 수 5 문제 풀이입니다. https://www.acmicpc.net/problem/10870 10870번: 피보나치 수 5 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net data = [0] * 21 def fibo(x) : if x == 0 : return 0 if x == 1 : return 1 if data[x] != 0 : return data[x] data[x] = fibo(x - 1) + fibo(x - 2) return data[x] n = in..

백준(Python) 2839번 설탕 배달 풀이

Python으로 구현한 2839번 설탕 배달 문제 풀이입니다. https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net n = int(input()) result = 0 while n >= 0 : if n % 5 == 0 : result += (n // 5) print(result) break n -= 3 result += 1 else : print(-1) 입력받은 수가 5의 배수라면 변수 result에 n을 5로 나눈 몫을 누적하고 최종 result 값을 출력한..

[다이나믹 프로그래밍] 이코테 (파이썬) 바닥 공사 풀이

[문제] 가로의 길이가 N, 세로의 길이가 2인 직사각형 형태의 얇은 바닥이 있다. 태일이는 이 얇은 바닥을 1 X 2의 덮개, 2 X 1의 덮개, 2 X 2의 덮개를 이용해 채우고자 한다. 이때 바닥을 채우는 모든 경우의 수를 구하는 프로그램을 작성하시오. 예를 들어 2 X 3 크기의 바닥을 채우는 경우의 수는 5가지이다. [입력 조건] 1. 첫째 줄에 N이 주어진다. (1