반응형

알고리즘/DP 16

[백준] 1463 : 1로 만들기 (JAVA)

https://www.acmicpc.net/problem/1463 [풀이과정]DP문제. N을 index로 두고DP[N]를1 ) 3으로 나뉠 때 -> DP[N/3] + 12 ) 2로 나뉠 때 -> DP[N/2] + 1 3 ) -1 할 때 -> DP[N-1] + 13가지 중 가장 작은 값으로 갱신하며 채우기. [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;/*1. X가 3으로 나누어 떨어지면, 3으로 나눈다.2. X가 2로 나누어 떨어지면, 2로 나눈다.3. 1을 뺀다. */public class Main{ static Bu..

알고리즘/DP 2025.04.07

[백준] 11726 : 2 x n 타일링 (JAVA)

https://www.acmicpc.net/problem/11726 [풀이과정]전형적인 DP 문제다. 점화식으로 풀면 됨.직접 타일을 그려보면  f(n-1)의 가짓수에 세로 타일을 하나씩 붙이고 + f(n-2)의 가짓수에 가로 타일 2개가 붙은 모양임f(0) = 1, f(1) = 1 이고f(n) = f(n-2) + f(n-1) [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/*2xn 크기의 직사각셩을 1x2,2x1 타일로 채우는 방법의 수 구하기 */public class Main { static BufferedReader br = new BufferedReader(new Inp..

알고리즘/DP 2025.04.03

[백준] 2631 : 줄세우기 (JAVA)

https://www.acmicpc.net/problem/2631 [풀이과정]전형적인 LIS 문제였다. N이 200으로 작아서 O(N^2)인 DP 방식으로 풀이했음.N이 커지면 O(nlogn)인 이분탐색으로 풀이해야 한다. 현재 탐색 중인 번호의 이전 번호들을 보면서 더 크면 DP[현재 번호] = DP[이전 번호 중 가장 큰 값을 가진 번호] + 1을 해주는 것  [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;/*N명의 아이들1번부터 N번. 옮기는 순서를 최소로 하여 일렬로 정렬 */..

알고리즘/DP 2025.03.25

[백준] 22869 : 징검다리 건너기 (JAVA)

https://www.acmicpc.net/problem/22869 [풀이과정]단순히 도달여부를 확인하기만 하면 되는 문제.O(N^2)이 2500만이어서 DFS로 풀었다가 시간초과가 발생했다. 단순히 N^2이 아닌 실제로 호출되는 함수가 컸던 부분이 원인이었음.DP를 이용해서 도달 가능한 부분만을 true로 삼아 경로를 확인하는 방식으로 호출 횟수를 줄임. [코드]import java.util.*;import java.lang.*;import java.io.*;/*사용하는 힘은 항상 양수.오른쪽으로 갈 때 사용해야 하는 힘이 K가 넘지 않을 때 이동 가능끝까지 도착이 되는지의 유무 계산*/class Main { static BufferedReader br = new BufferedReader(new..

알고리즘/DP 2025.03.24

[백준] 15989 : 1, 2, 3 더하기 4 (JAVA)

https://www.acmicpc.net/problem/15989 [풀이과정]DP[n][1] : 1로 끝나는 수식 개수 [1]1DP[1][1] = 1 [2]1+12DP[2][1] = 1DP[2][2] = 1 [3]1+1+11+23DP[3][1] = 1DP[3][2] = 1DP[3][3] = 1 [4]1+1+1+11+1+22+21+3DP[4][1] = 1DP[4][2] = 2 -> 1+1, 2 (DP[2][1], DP[2][2])DP[4][3] = 1 -> 1(DP[1][1])...[6]1+1+1+31+2+33+3DP[6][3] = DP[3][1] + DP[3][2] + DP[3][3] 점화식DP[i][1] = DP [i-1][1];DP[i][2] = DP[i-2][1] + DP[i-2][2];DP[i]..

알고리즘/DP 2024.11.20

[백준] 15988 : 1, 2, 3 더하기 3 (JAVA)

https://www.acmicpc.net/problem/15988 [풀이과정]모듈러 연산의 분배법칙 : 처음부터 끝까지 모두 더하고 % 연산을 하기 == 더하는 중간중간 % 연산을 하기즉, (A+B+C...) % n == ((A%10) + (B%10) + (C%10) + ...) % n N이 3미만 일 때 고려DP[1], DP[2], DP[3]는 직접 초기화하기 때문에 값이 3보다 작으면 런타임에러 발생 [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/*정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성 */public class Mai..

알고리즘/DP 2024.11.19

[백준] 12101 : 1, 2, 3 더하기 2 (JAVA)

https://www.acmicpc.net/problem/12101 [풀이과정]정수 4를 1,2,3의 합으로 나타내는 7가지 방법을 사전순으로 정렬 1. 1+1+1+12. 1+1+23. 1+2+14. 1+35. 2+1+16. 2+27. 3+11을 만드는 경우 12를 만드는 경우 1+1 / 23을 만드는 경우 1+1+1 / 1+2 / 2+1 / 34를 만드는 경우1+31+1+22+21+1+1+11+2+12+1+13+1i = 1, 2, 3n-i엔 +i를 끝에 붙여주기.[코드]paimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.u..

알고리즘/DP 2024.11.14

[백준] 9095 : 1, 2, 3 더하기 (JAVA)

https://www.acmicpc.net/problem/9095 [풀이과정]점화식 -> DP[n] = DP[n-1] + DP[n-2] + DP[n-3]; (n >= 4)DP[1] = 1, DP[2] = 2, DP[3] = 4 임.  1) 1을 만드는 경우1 2) 2를 만드는 경우1 + 12 3) 3을 만드는 경우1 + 1 + 11 + 22 + 13 4) 4를 만드는 경우 -> DP[1] + DP[2] + DP[3]1 + 31 + 1 + 22 + 21 + 1 + 1 + 11 + 2 + 12 + 1 + 13 + 1 5) 5를 만드는 경우 -> DP[2] + DP[3] + DP[4]1 + 1 + 12 + 11 + 1 + 1 + 11 + 2 + 12 + 1 + 13 + 11 + 3 + 11 + 1 + 2 + ..

알고리즘/DP 2024.11.13

[백준] 2240 : 자두 나무 (JAVA)

https://www.acmicpc.net/problem/2240 [풀이과정]3차원 DP로 풀었다.for( 1 -> T ){ for( 1 -> W+1 ){ 매초마다 해당 시간에 떨어지는 열매 1. 1번 나무로 떨어질 때 1-1. 해당 위치로 이동해서 1-2. 그대로 2. 2번 나무로 떨어질 때 2-1. 해당 위치로 이동해서 2-2. 그대로 }}  *W+2로 초기화한 이유는 w = W+1일 때, W번 이동했을 경우를 계산할 수 있기 때문이다. [코드]import java.io.*;import java.util.StringTokenizer;/*매 초마다 두 개의 나무 중 하나의 나무에서 자두가..

알고리즘/DP 2024.11.11

[백준] 17404 : RGB 거리 2 (JAVA)

https://www.acmicpc.net/problem/17404 [풀이과정]최대한 단순하게 생각하는 것이 풀이의 핵심인 것 같다.RGB거리 실버 1보단 어려웠다.https://www.acmicpc.net/problem/1149 [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;/*집이 N개.각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때,1. 1번 집의 색은 2번, N번 집의 색과 같지 않아야 한다.2. N번 집의 색은 N-1번, 1번 집의 색과 같지 않아야 한다.3. i(2

알고리즘/DP 2024.11.01
반응형