diff --git a/personal/JAEHEE25/BOJ/BOJ15988.java b/personal/JAEHEE25/BOJ/BOJ15988.java new file mode 100644 index 0000000..3ea5e5e --- /dev/null +++ b/personal/JAEHEE25/BOJ/BOJ15988.java @@ -0,0 +1,27 @@ +import java.util.*; +import java.lang.*; +import java.io.*; + +class Main { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + //dp + long[] dp = new long[1000001]; + dp[1] = 1; + dp[2] = 2; + dp[3] = 4; + for (int i = 4; i <= 1000000; i++) { + dp[i] = (dp[i - 3] + dp[i - 2] + dp[i - 1]) % 1_000_000_009; + } + + //정답 출력 + StringBuilder answer = new StringBuilder(); + int T = Integer.parseInt(br.readLine()); + for (int i = 0; i < T; i++) { + int t = Integer.parseInt(br.readLine()); + answer.append(dp[t] % 1_000_000_009).append("\n"); + } + System.out.println(answer); + } +} \ No newline at end of file diff --git "a/weekly/week08/BOJ_13549_\354\210\250\353\260\224\352\274\255\354\247\2103/JAEHEE25.java" "b/weekly/week08/BOJ_13549_\354\210\250\353\260\224\352\274\255\354\247\2103/JAEHEE25.java" new file mode 100644 index 0000000..1cdd9f4 --- /dev/null +++ "b/weekly/week08/BOJ_13549_\354\210\250\353\260\224\352\274\255\354\247\2103/JAEHEE25.java" @@ -0,0 +1,47 @@ +package week08.BOJ_13549_숨바꼭질3; + +import java.util.*; +import java.lang.*; +import java.io.*; + +class BOJ13549 { + static boolean[] visit; + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + int N = Integer.parseInt(st.nextToken()); //수빈 + int K = Integer.parseInt(st.nextToken()); //동생 + + int answer = Integer.MAX_VALUE; + visit = new boolean[100001]; + Queue queue = new LinkedList<>(); + queue.add(new Pos(N, 0)); + while (!queue.isEmpty()) { + Pos poll = queue.poll(); + visit[poll.x] = true; + + if (poll.x == K) { + answer = Math.min(answer, poll.time); + } + + if (check(poll.x + 1)) queue.add(new Pos(poll.x + 1, poll.time + 1)); + if (check(poll.x - 1)) queue.add(new Pos(poll.x - 1, poll.time + 1)); + if (check(poll.x * 2)) queue.add(new Pos(poll.x * 2, poll.time)); + } + System.out.println(answer); + } + + static boolean check(int value) { + return value >= 0 && value <= 100000 && !visit[value]; + } +} + +class Pos { + int x; + int time; + + Pos(int x, int time) { + this.x = x; + this.time = time; + } +} \ No newline at end of file diff --git "a/weekly/week08/BOJ_15989_1,2,3\353\215\224\355\225\230\352\270\2604/JAEHEE25.java" "b/weekly/week08/BOJ_15989_1,2,3\353\215\224\355\225\230\352\270\2604/JAEHEE25.java" new file mode 100644 index 0000000..032ab2c --- /dev/null +++ "b/weekly/week08/BOJ_15989_1,2,3\353\215\224\355\225\230\352\270\2604/JAEHEE25.java" @@ -0,0 +1,32 @@ +import java.util.*; +import java.lang.*; +import java.io.*; + +class BOJ15989 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + //dp[i][j] = i를 만들 때 마지막 숫자가 j이고, 오름차순인 방법의 수 + int[][] dp = new int[10001][4]; + dp[1][1] = 1; //1 + dp[2][1] = 1; //1,1 + dp[2][2] = 1; //2 + dp[3][1] = 1; //1,1,1 + dp[3][2] = 1; //1,2 + dp[3][3] = 1; //3 + for (int i = 4; i <= 10000; i++) { + dp[i][1] = dp[i-1][1]; + dp[i][2] = dp[i-2][1] + dp[i-2][2]; + dp[i][3] = dp[i-3][1] + dp[i-3][2] + dp[i-3][3]; + } + + //정답 출력 + StringBuilder answer = new StringBuilder(); + int T = Integer.parseInt(br.readLine()); + for (int i = 0; i < T; i++) { + int t = Integer.parseInt(br.readLine()); + answer.append(dp[t][1] + dp[t][2] + dp[t][3]).append("\n"); + } + System.out.println(answer); + } +} \ No newline at end of file diff --git "a/weekly/week08/BOJ_2531_\355\232\214\354\240\204\354\264\210\353\260\245/JAEHEE25.java" "b/weekly/week08/BOJ_2531_\355\232\214\354\240\204\354\264\210\353\260\245/JAEHEE25.java" new file mode 100644 index 0000000..e91122e --- /dev/null +++ "b/weekly/week08/BOJ_2531_\355\232\214\354\240\204\354\264\210\353\260\245/JAEHEE25.java" @@ -0,0 +1,55 @@ +package week08.BOJ_2531_회전초밥; + +import java.util.*; +import java.lang.*; +import java.io.*; + +class BOJ2531 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + int N = Integer.parseInt(st.nextToken()); + int d = Integer.parseInt(st.nextToken()); + int k = Integer.parseInt(st.nextToken()); + int c = Integer.parseInt(st.nextToken()); + + int[] plates = new int[N]; + for (int i = 0; i < N; i++) { + plates[i] = Integer.parseInt(br.readLine()); + } + + Map sushi = new HashMap<>(); + //처음 k개의 접시 + for (int i = 0; i < k; i++) { + sushi.put(plates[i], sushi.getOrDefault(plates[i], 0) + 1); + } + + int start = 0; + int end = k; + int answer = sushi.size(); + if (!sushi.containsKey(c)) answer++; + + while (start < N - 1) { + //이전 스시 빼기 + if (sushi.get(plates[start]) == 1) { //1개 남았다면 아예 삭제 + sushi.remove(plates[start]); + } else { + sushi.put(plates[start], sushi.get(plates[start]) - 1); + } + + if (end >= N) end %= N; //원형 벨트 + sushi.put(plates[end], sushi.getOrDefault(plates[end], 0) + 1); //다음 초밥 넣기 + + int cnt = sushi.size(); + if (!sushi.containsKey(c)) { + cnt++; + } + answer = Math.max(answer, cnt); + + start++; + end++; + + } + System.out.println(answer); + } +}