2025/09/14 3

BOJ 14567 java 풀이

DP 문제이다.선수과목에서 숫자가 큰거보다 나중에 들어야하는 작은거는 없다.작은거부터 큰거로 가면서 이전 선수과목 중 가장 기수가 높은거 + 1 해주면 된다.그리고 그 과정에서 이 과목이 내꺼의 선수과목인지를 미리 체크해서 그걸 쓰면 됨 import java.util.Scanner;class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int M = sc.nextInt(); boolean[][] cond = new boolean[N+1][N+1]; int[] dp = new in..

알고리즘 공부 2025.09.14

BOJ 2303 재풀이

DP로 푼다.내꺼 기준 왼쪽만 본다. - 내가 왼쪽이랑 숫자를 바꾸려 하면 : 왼쪽 숫자는 변경되지 않은 상태일때만 가능- 내가 왼쪽이랑 숫자를 바뀌지 않는다면 : 왼쪽 숫자가 변경되었든 아니든 상관 없음. 근데 내 왼쪽이 vip거나 내가 vip 면 그냥 왼쪽의 모든 방법을 더해주면 된다. 즉, 앞의 상태를 가지고 있는 DP import java.util.Scanner;class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); boolean[] seat = new boolean[n+1]; int vips = ..

알고리즘 공부 2025.09.14

BOJ 17070 java 풀이

DP 문제이고 (BFS 쓰면 시간초과남)중요한건 결국 "해당 위치에 도달하는 방법을 구하면 된다"예를 들어 왼쪽으로 오는 방법은 왼쪽/대각선, 세로로 오는 방법은 세로/대각선, 대각선으로 오는 방법은 왼쪽/세로/대각선그래서 그 이전에 있던 방법들을 구하면 됨 import java.util.Scanner;class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] map = new int[n][n]; for (int i = 0; i 0) { dp[2][i][j] ..

알고리즘 공부 2025.09.14