다이나믹프로그래밍 3

백준 11054번:가장 긴 바이토닉 부분 수열(JAVA)

문제수열에서 증가하다가 감소하는 부분 수열 중 가장 긴 길이를 구하는 문제입니다.이를 위해 각 위치 i를 기준으로i까지의 최장 증가 수열 (LIS) 길이: inc[i]i부터의 최장 감소 수열 (LDS) 길이: dec[i]최종 결과는 inc[i] + dec[i] - 1 중 최댓값입니다. 바이토닉 수열이란?어떤 수열에서 증가하다가 감소하는 수열을 의미합니다.1 3 5 4 2 → 바이토닉1 2 3 4 5 → X (감소 없음)5 4 3 2 1 → X (증가 없음)바이토닉 수열의 최대 길이를 구하는 프로그램을 작성하려고 합니다. 자바 코드 ①: 조건문 방식import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.IOException..

Algorithm 2025.06.11

프로그래머스: N으로 표현(JAVA)

문제 설명숫자 N과 목표 숫자 number가 주어졌을 때, N을 최대 8번만 사용하여 사칙연산(+ - * /)과 숫자 이어 붙이기(N, NN, NNN 등)만으로 number를 만들 수 있는 가장 작은 횟수를 구하는 문제입니다.예: N = 5, number = 12일 때→ 5 + 5 + (5 / 5) = 11은 안 되고,→ 55 / 5 + 2 = 13도 안 되고,→ 5 * 2 + 5 + (5 / 5) = 12 같은 식으로 다양한 조합이 가능합니다.💡 풀이 - DP + Set 활용✅ 핵심 포인트dp[i]는 N을 i번 사용해서 만들 수 있는 모든 숫자 집합입니다.i를 1부터 8까지 순회하며 가능한 연산 조합을 모두 저장합니다.각 단계에서 목표값이 등장하면 바로 i를 리턴합니다.Java 코드import jav..

Algorithm 2025.04.24

백준 1463번: 1로 만들기

문제 설명주어진 정수 N을 다음 세 가지 연산을 이용해 1로 만들려고 합니다.N이 3으로 나누어떨어지면, 3으로 나눈다.N이 2로 나누어떨어지면, 2로 나눈다.N에서 1을 뺀다.이 연산을 최소한으로 사용하여 1을 만드는 방법을 찾는 문제입니다.해결 방법이 문제는 동적 계획법(DP, Dynamic Programming) 을 활용하여 해결할 수 있습니다.dp[i]를 정수 i를 1로 만드는 최소 연산 횟수라고 정의합니다.dp[1] = 0 (1은 이미 1이므로 연산이 필요 없음)dp[i]는 다음의 세 가지 경우 중 최소값을 선택합니다:dp[i-1] + 1 (1을 빼는 경우)dp[i/2] + 1 (i가 2로 나누어떨어지는 경우)dp[i/3] + 1 (i가 3으로 나누어떨어지는 경우)코드import java.io...

Algorithm 2025.03.12