diff --git "a/weekly/week02/BOJ_15486_\355\207\264\354\202\2542/sukangpunch.java" "b/weekly/week02/BOJ_15486_\355\207\264\354\202\2542/sukangpunch.java" new file mode 100644 index 0000000..014abd6 --- /dev/null +++ "b/weekly/week02/BOJ_15486_\355\207\264\354\202\2542/sukangpunch.java" @@ -0,0 +1,39 @@ +package stduy.week02; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +// 퇴사 2 +// 답 확인 +public class BOJ_15486 { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + int N = Integer.parseInt(br.readLine()); + int[] T = new int[N + 1]; + int[] P = new int[N + 1]; + + for(int i = 1; i <= N; i++){ + String[] s = br.readLine().split(" "); + T[i] = Integer.parseInt(s[0]); + P[i] = Integer.parseInt(s[1]); + } + + int[] dp = new int[N + 2]; // N+1일에 끝나는 상담을 위해 N+2 크기 + + for(int i = 1; i <= N; i++){ + // i 일에 상담을 하지 않으면, i일의 수익이 i+1 에도 그대로 유지 + dp[i + 1] = Math.max(dp[i + 1], dp[i]); + + // i일에 상담을 하는 경우 + int endDay = i + T[i]; + if(endDay <= N + 1){ + dp[endDay] = Math.max(dp[endDay], dp[i] + P[i]); // 수익이 발생하는 날에 바로 P값을 적용한 결과 저장 + } + } + + System.out.println(dp[N + 1]); + } +} diff --git "a/weekly/week03/BOJ_6603_\353\241\234\353\230\220/sukanpunch.java" "b/weekly/week03/BOJ_6603_\353\241\234\353\230\220/sukanpunch.java" new file mode 100644 index 0000000..17788ad --- /dev/null +++ "b/weekly/week03/BOJ_6603_\353\241\234\353\230\220/sukanpunch.java" @@ -0,0 +1,54 @@ +package stduy.week03; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +// 로또 +public class BOJ_6603 { + + static StringBuilder sb = new StringBuilder(); + static List list; + static int[] arr; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + while (true) { + String[] s = br.readLine().split(" "); + int K = Integer.parseInt(s[0]); + if (K == 0) { + break; + } + arr = new int[K]; + list = new ArrayList<>(); + + for (int i = 0; i < K; i++) { + arr[i] = Integer.parseInt(s[i + 1]); + } + + backtrack(0, 0, K); + sb.append("\n"); + } + + System.out.println(sb); + } + + private static void backtrack(int depth, int start, int K) { + if (depth == 6) { + for (int i = 0; i < 6; i++) { + sb.append(list.get(i)).append(" "); + } + sb.append("\n"); + return; + } + + for (int i = start; i < K; i++) { + list.add(arr[i]); + backtrack(depth + 1, i + 1, K); + list.remove(list.size() - 1); + } + } +}