다이나믹프로그래밍 5

백준(BOJ) 2579 : 계단 오르기 (실버3) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/25793줄 요약계단 오르기 게임에서 얻을 수 있는 총 점수의 최댓값을 구하기 위해 다음과 같은 점화식을 세웁니다.memo[i] = max(memo[i-3] + stairs[i-1], memo[i-2]) + stairs[i]현재 계단을 밟을 때, 이전에 밟은 계단이 i-3번째 계단인 경우와 i-2번째 계단인 경우 중 더 큰 점수를 선택하여 현재 계단의 점수를 더합니다.메모이제이션 기법을 사용하여 이전에 계산된 값을 저장하고 재사용함으로써 중복 계산을 피하고 효율성을 높입니다.memo 배열을 사용하여 각 계단까지의 최대 점수를 저장합니다.점화식을 이용하여 계산할 때, 이미 계산된 값은 memo 배열에서 가져와 사용합니다.최종적으로 memo[n]에..

Problem_Solving 2024.05.06

백준(BOJ) 11726 : 2×n 타일링 (실버3) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/117263줄 요약2×n 직사각형을 채우는 방법의 수를 구하기 위해 점화식을 세웁니다.2×n 직사각형의 가장 오른쪽에 1×2 타일을 세로로 놓는 경우, 나머지 부분은 2×(n-1) 직사각형을 채우는 방법의 수와 같습니다.2×n 직사각형의 가장 오른쪽에 2×1 타일을 가로로 2개 놓는 경우, 나머지 부분은 2×(n-2) 직사각형을 채우는 방법의 수와 같습니다.따라서 2×n 직사각형을 채우는 방법의 수는 2×(n-1) 직사각형을 채우는 방법의 수와 2×(n-2) 직사각형을 채우는 방법의 수를 합한 것과 같습니다.이를 점화식으로 표현하면 memo[i] = memo[i-1] + memo[i-2]가 됩니다.메모이제이션 기법을 사용하여 이전에 계산된 값을..

Problem_Solving 2024.05.06

백준(BOJ) 1463 : 1로 만들기 (실버3) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/14633줄 요약동적 계획법을 이용하여, 각 수에 대해 2로 나누기, 3으로 나누기, 1 빼기 중 최소 연산 횟수를 선택하여 메모이제이션 배열에 저장합니다.memo[i] = min(memo[i/2], memo[i/3], memo[i-1]) + 1의 점화식을 사용하여 계산합니다.N에 대한 최소 연산 횟수를 출력합니다.코드// package boj1463;import java.io.*;public class Main { public static void main(String[] args) throws Exception { // 입력 파일에서 데이터 읽기 (테스트용) // System.setIn(new FileInput..

Problem_Solving 2024.05.05

백준(BOJ) 9095 : 1, 2, 3 더하기 (실버3) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/90953줄 요약메모이제이션을 이용한 동적 계획법으로 1, 2, 3의 합으로 나타내는 방법의 수를 계산합니다.memo[i] = memo[i-3] + memo[i-2] + memo[i-1]의 점화식을 사용하여 계산합니다.각 테스트 케이스에 대해 계산된 결과를 출력합니다.코드// package boj9095;import java.io.*;import java.util.Arrays;public class Main { public static void main(String[] args) throws Exception { // 입력 파일에서 데이터 읽기 (테스트용) // System.setIn(new FileInputStr..

Problem_Solving 2024.05.04

백준(BOJ) 2775 : 부녀회장이 될테야 (자바, JAVA)

2775번: 부녀회장이 될테야 첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다 www.acmicpc.net 설계 주어진 층(k)과 호(n)에 살아야 하는 사람 수를 계산하는 문제를 해결. 각 층의 각 호에 필요한 사람 수는 그 아래 층의 1호부터 해당 호까지 사는 사람들의 합과 같음. 0층의 i호에는 i명이 살고 있으므로, 이 정보를 시작으로 각 층과 호에 대해 필요한 사람 수를 계산해 나감. guess 함수는 이러한 계산 과정을 반복하여 k층 n호에 필요한 사람 수를 구하고 반환. 구현 코드 // package boj2775; // 패키지 선언 import java.util.Arrays; // Arrays..

Problem_Solving 2023.12.29