전체 글

· 백준/DP
[백준] 400 - 다이나믹 프로그래밍 1 : 카드 구매하기 2 (16194번 JAVA) [접근 방법] 기본적인 풀이방법은 [11052 카드 구매하기]와 동일하다. * 추가 해야 할 부분은 카드 i 개의 최솟값을 저장하는 배열인 dp에 초기값을 부여해주어야 한다. 그 이유는 초기값을 부여 해주지 않는 경우, Math.min()을 활용한 비교 과정을 통해 모든 값이 0 이 될 것이다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.String..
· 백준/DP
[백준] 400 - 다이나믹 프로그래밍 1 : 카드 구매하기 (!) (11052번 JAVA) [접근 방법] 핵심은 동적 프로그램 인 만큼, 카드 i 개 구매의 최댓값이 저장 되고, 해당 값을 이용하여 다음 값을 구하는 것이다. 카드 i 개를 구매하는 경우의 수는 카드 1개를 구매 + 카드 i - 1개를 구매, 카드 2개를 구매 + 카드 i - 2개를 구매, 카드 3개를 구매 + 카드 i - 3개를 구매 ... 하는 경우들이 존재한다. 카드 i개 구매의 최댓값을 저장하는 배열은 dp[] 라 하고, 카드 i개가 들어있는 카드팩의 가격을 저장하는 배열을 price[] 라 할때, dp[i] = dp[i - j] + p[j] 로 정리 할 수 있다. ※ 1
· 백준/DP
[백준] 1, 2, 3 더하기 (★) (9095번 JAVA) / 400 - 다이나믹 프로그래밍 1 [접근 방법] 1을 나타내는 방법 : 1가지 {1} 2를 나타내는 방법 : 2가지 {2} , {1,1} 3을 나타내는 방법 : 4가지 {3} , {2, 1}, {1, 2}, {1, 1, 1} 위 3가지를 전제조건으로 한다. 4의 합을 나타내는 순서쌍은 (1,3) , (2,2) , (3,1) 과 같이 나타낼 수 있다. (1,3) 은 (1을 더하는 방법 : 1가지) * (3을 나타내는 방법 : 4가지) => 4 (2,2) 은 (2를 더하는 방법 : 1가지) * (2를 나타내는 방법 : 2가지) => 2 (3,1) 은 (3을 더하는 방법 : 1가지) * (1을 나타내는 방법 : 1가지) => 1 4를 나타내는 방..
· 백준/DP
[백준] 1로 만들기 (!) (1463번 JAVA) / 400 - 다이나믹 프로그래밍 1 [접근 방법] N의 경우를 4가지로 나눈다. 1. N이 6으로 나눠 떨어지는 경우 2. N이 3으로 나눠 떨어지는 경우 3. N이 2로 나눠 떨어지는 경우 4. 그 외 (N이 3과 2 모두 나눠 떨어지지 않는 경우) 1. N이 6으로 나눠 떨어지는 경우 * N-1을 한 후 연산하는 횟수 * N / 2를 한 후 연산하는 횟수 * N / 3을 한 후 연산하는 횟수 위 3가지 방법 중 가장 적은 횟수를 가진 방법을 택한다. 2. N이 3으로 나눠 떨어지는 경우 * N-1을 한 후 연산하는 횟수 * N / 3을 한 후 연산하는 횟수 위 2가지 방법 중 가장 적은 횟수를 가진 방법을 택한다. 3. N이 2으로 나눠 떨어지는 ..
[백준] 303 - 수학 1 (참고) : Base Conversion (11576번 JAVA) [StringBuilder의 내장함수 reverse()를 사용한 방식] import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedRe..
· 백준
[백준] 큰 수 A + B (10757번 JAVA) * Math.BigInteger 라이브러리를 사용하지 않는 방법 1. String 으로 문자열을 입력 받는다. 2. 배열에 역순으로 저장 한다. 3. 동일 자리 수를 더한다. 이때, value = A[i] + B[i] 라 칭한다. A[i] = value % 10 // 해당 자리 수 A[i+1] += value / 10 // 올림 수 4. 계산 완료된 배열을 역순으로 출력한다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter..
내가 잘한다 했잖아
도롱도롱