본문 바로가기

DP

(57)
[Python] 23815번 똥게임 https://www.acmicpc.net/problem/23815 23815번: 똥게임 이 게임은 똥냄새가 너무 나서 도저히 볼 수가 없다! 따라서 당신은 직접 똥게임을 하지 않고 프로그램한테 똥게임을 시킬 것이다. 처음에는 사람 1명으로 시작한다. 당신에게는 총 $N$번의 턴 www.acmicpc.net 22/11/17 그리디와 DP를 섞은 문제로, 실수하기가 좋은 문제라고 생각한다. 문제 접근 방식: 나는 문제에서 주어진 선택지 $N$개의 제한이 최대 $100,000$개라는 것에 주목하였다. 일단, 두 가지 선택지 중에서 선택을 할 때 항상 큰 것을 선택해야 된다는 점은 너무나도 당연한 사실이다.(그리디 적인 접근) 문제는 스킵을 최대 한 번까지 할 수 있다는 점이다. 여기서 DP를 사용해야 한다...
[Python] 1737번 Pibonacci https://www.acmicpc.net/problem/1737 1737번: Pibonacci 첫째 줄에 P[n]을 출력한다. 값이 매우 커질 수 있으므로 1,000,000,000,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 22/11/08 신박한 2차원 DP문제로, 처음에는 재귀를 이용한 탑다운 방식으로 접근했었으나, 재귀 시간이 너무 오래 걸려 바텀업 방식으로 전환하여 풀 수 있었던 문제다. 문제 접근 방식: 이 문제를 보면, 기존 피보나치수열의 점화식과는 다르게 아래와 같은 점화식을 가지고 있다. 맨 처음 생각한 풀이는 위의 점화식을 재귀로 구현하고, DP테이블은 딕셔너리로 구현함으로써 하려고 했다. 딕셔너리의 키는 실수 연산을 통해서 구현하려고 했다. 근데, 이..
[Python] 5011번 Robots on a grid https://www.acmicpc.net/problem/5011 5011번: Robots on a grid You have recently made a grid traversing robot that can find its way from the top left corner of a grid to the bottom right corner. However, you had forgotten all your AI programming skills, so you only programmed your robot to go rightwards and downwards www.acmicpc.net 22/10/14 전형적인 BFS문제에 갈 수 있는 방법을 구하는 DP문제가 더해진 문제로, 개인적으로 골드 5가 적당..
[Python] 4172번 sqrt log sin https://www.acmicpc.net/problem/4172 4172번: sqrt log sin 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 한 줄에 하나씩 주어진다. 각 줄에는 \(i\)가 주어지며, 이 수는 0보다 작지 않고, 백만보다 크지 않다. 입력의 마지막 줄에는 -1이 주어지며, www.acmicpc.net 22/10/08 DP라고 보기에도 조금 민망할 정도로, 이미 점화식을 문제에서 다 주었다. 이를 메모이제이션 기법을 활용하여 단순 구현만 하면 되는 문제이다. 문제 접근 방식: 처음에는 입력마다 DP값을 구해주도록 했는데, 시간초과가 났다. 그래서 입력 전에 미리 DP값을 다 구해주고(전처리 과정), 입력 할 때마다 그 값을 출력하도록 바꿔주었다. 구현은 math모듈의 floo..
[Python] 17845번 수강 과목 https://www.acmicpc.net/problem/17845 17845번: 수강 과목 첫줄에 서윤이의 최대 공부시간 N (1 ≤ N ≤ 10,000), 과목 수 K (1 ≤ K ≤ 1,000)이 공백을 사이에 두고 주어진다. 이후 K개의 줄에 중요도 I (1 ≤ I ≤ 100,000), 필요한 공부시간 (1 ≤ T ≤ 10,000)이 www.acmicpc.net 22/10/04 전형적인 배낭 문제이다. 문제 접근 방식: 이 문제에서는 서윤이가 공부에 투자할 수 있는 시간의 한계가 존재하므로, 서윤이가 쓸 수 있는 총 공부 시간의 한계, 다시 말해 이 문제에서는 N의 값을 배낭의 한계허용치라고 생각할 수 있다. 과목의 중요도의 합이 최대가 되도록 시간을 써야 하므로, 각 과목의 중요도는 배낭에 담는..
[Python] 9084번 동전 / 3067번 Coins https://www.acmicpc.net/problem/9084 9084번: 동전 우리나라 화폐단위, 특히 동전에는 1원, 5원, 10원, 50원, 100원, 500원이 있다. 이 동전들로는 정수의 금액을 만들 수 있으며 그 방법도 여러 가지가 있을 수 있다. 예를 들어, 30원을 만들기 위해서는 www.acmicpc.net https://www.acmicpc.net/problem/3067 3067번: Coins 우리나라 화폐단위, 특히 동전에는 1원, 5원, 10원, 50원, 100원, 500원이 있다. 이 동전들로는 모든 정수의 금액을 만들 수 있으며 그 방법도 여러 가지가 있을 수 있다. 예를 들어 30원을 만들기 위해 www.acmicpc.net 22/10/03 배낭 문제 중 하나인데, 1차원 ..
[Python] 21317번 징검다리 건너기 https://www.acmicpc.net/problem/21317 21317번: 징검다리 건너기 산삼을 얻기 위해 필요한 영재의 최소 에너지를 출력한다. www.acmicpc.net 22/10/03 개인적으로 굉장히 난이도에 비해 굉장히 어렵게 느껴졌던 문제로, 다른 방법으로 풀었다면 조금 쉽게 해결하지 않았을까 하는 아쉬움이 남는 문제이기도 하다. 문제 접근 방식: 백트래킹으로도 접근할 수 있는 문제이긴 하지만, 나의 경우는 DP로 이 문제를 접근했었다. 굉장히 많이 틀렸기 때문에 틀린 과정을 상세하게 설명하고자 한다. 맨 처음 풀이는 그냥 단순하게 DP[N] = N번째까지 도착했을 때, 산삼을 얻기 위해 필요한 영재의 에너지 최솟값이라고 정의를 했었다. 그리고 가장 큰 점프는 한 번만 할 수 있으므..
[Python] 11057번 오르막 수 https://www.acmicpc.net/problem/11057 11057번: 오르막 수 오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수 www.acmicpc.net 22/10/03 전형적인 DP문제로, 나는 이차원 배열을 사용하여 문제를 해결하였다. 문제 접근 방식: 나는 DP[i][j]의 정의를 다음과 같이 정의했다. DP[i][j] = i자리 숫자일 때, j로 끝나는 오르막 수의 개수 이와 같이 정의를 하면, j가 0일 때, 1일 때, ..., 9일 때 모두 비슷한 점화식을 가진다. 오르막 수의 정의 상 이전 숫자보다 ..