diff --git "a/all_part_1/\353\254\270\355\231\230\355\235\254/\352\260\200\355\235\254\354\231\200_\355\202\244\354\233\214\353\223\234.java" "b/all_part_1/\353\254\270\355\231\230\355\235\254/\352\260\200\355\235\254\354\231\200_\355\202\244\354\233\214\353\223\234.java" new file mode 100644 index 0000000..f4acfc3 --- /dev/null +++ "b/all_part_1/\353\254\270\355\231\230\355\235\254/\352\260\200\355\235\254\354\231\200_\355\202\244\354\233\214\353\223\234.java" @@ -0,0 +1,23 @@ +import java.util.HashSet; +import java.util.Scanner; + +public class 가희와_키워드 { + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int n = sc.nextInt(); + int m = sc.nextInt(); + sc.nextLine(); + HashSet set = new HashSet<>(); + for(int i = 0; i < n; i++) { + set.add(sc.nextLine()); + } + for(int i = 0; i < m; i++) { + String[] input = sc.nextLine().split(","); + for(String s : input) { + set.remove(s); + } + System.out.println(set.size()); + } + } +} diff --git "a/all_part_1/\353\254\270\355\231\230\355\235\254/\353\223\261\354\210\230_\352\265\254\355\225\230\352\270\260.java" "b/all_part_1/\353\254\270\355\231\230\355\235\254/\353\223\261\354\210\230_\352\265\254\355\225\230\352\270\260.java" new file mode 100644 index 0000000..b6c1125 --- /dev/null +++ "b/all_part_1/\353\254\270\355\231\230\355\235\254/\353\223\261\354\210\230_\352\265\254\355\225\230\352\270\260.java" @@ -0,0 +1,42 @@ +import java.util.*; +import java.util.stream.Collectors; + +public class 등수_구하기 { + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + StringTokenizer st = new StringTokenizer(scanner.nextLine()); + + int n = Integer.parseInt(st.nextToken()); + int s = Integer.parseInt(st.nextToken()); + int p = Integer.parseInt(st.nextToken()); + + int[] scores; + if (n > 0) { + scores = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); + } else { + scores = new int[0]; + } + + if (n == 0) { + System.out.println(1); + return; + } + int rank = 1; + + if(n == p && scores[n - 1] >= s) { + System.out.println(-1); + return; + } + + for(int i = 0; i < n; i++) { + if(scores[i] > s) { + rank++; + } + else { + break; + } + } + System.out.println(rank); + } +} diff --git "a/all_part_1/\353\254\270\355\231\230\355\235\254/\354\247\204\354\232\260\354\231\200_\353\213\254\354\227\254\355\226\211.java" "b/all_part_1/\353\254\270\355\231\230\355\235\254/\354\247\204\354\232\260\354\231\200_\353\213\254\354\227\254\355\226\211.java" new file mode 100644 index 0000000..953cee3 --- /dev/null +++ "b/all_part_1/\353\254\270\355\231\230\355\235\254/\354\247\204\354\232\260\354\231\200_\353\213\254\354\227\254\355\226\211.java" @@ -0,0 +1,53 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; + +public class 진우와_달여행 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + String[] input = br.readLine().split(" "); + int n = Integer.parseInt(input[0]); + int m = Integer.parseInt(input[1]); + + int[][] map = new int[n][m]; + int[][][] dp = new int[n][m][3]; + int[][] ways = {{-1, -1}, {-1, 0}, {-1, +1}}; + + + for(int i = 0; i < n; i++){ + map[i] = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); + } + + for (int j = 0; j < m; j++) { + dp[0][j][0] = dp[0][j][1] = dp[0][j][2] = map[0][j]; + } + + for (int i = 1; i < n; i++) { + for (int j = 0; j < m; j++) { + for (int k = 0; k < 3; k++) { + int prevJ = j + ways[k][1]; + if (prevJ >= 0 && prevJ < m) { + dp[i][j][k] = map[i][j] + Math.min(dp[i - 1][prevJ][(k + 1) % 3], dp[i - 1][prevJ][(k + 2) % 3]); + } else { + dp[i][j][k] = Integer.MAX_VALUE; + } + } + } + } + + int minFuel = Integer.MAX_VALUE; + for (int j = 0; j < m; j++) { + for (int k = 0; k < 3; k++) { + minFuel = Math.min(minFuel, dp[n - 1][j][k]); + } + } + + System.out.println(minFuel); + + + br.close(); + } +} diff --git "a/all_part_2/\353\254\270\355\231\230\355\235\254/\354\240\204\352\265\254\354\231\200_\354\212\244\354\234\204\354\271\230.java" "b/all_part_2/\353\254\270\355\231\230\355\235\254/\354\240\204\352\265\254\354\231\200_\354\212\244\354\234\204\354\271\230.java" new file mode 100644 index 0000000..c91976a --- /dev/null +++ "b/all_part_2/\353\254\270\355\231\230\355\235\254/\354\240\204\352\265\254\354\231\200_\354\212\244\354\234\204\354\271\230.java" @@ -0,0 +1,58 @@ +import java.io.*; + +public class 전구와_스위치 { + + public static void toggle(int[] arr, int idx) { + arr[idx] ^= 1; + if (idx > 0) arr[idx - 1] ^= 1; + if (idx < arr.length - 1) arr[idx + 1] ^= 1; + } + + public static int solve(int[] now, int[] goal, int n, boolean pressFirst) { + int[] bulbs = now.clone(); + int pressCount = 0; + + if (pressFirst) { + toggle(bulbs, 0); + pressCount++; + } + + for (int i = 1; i < n; i++) { + if (bulbs[i - 1] != goal[i - 1]) { + toggle(bulbs, i); + pressCount++; + } + } + + if (bulbs[n - 1] != goal[n - 1]) { + return Integer.MAX_VALUE; + } + + return pressCount; + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int n = Integer.parseInt(br.readLine()); + int[] now = new int[n]; + int[] goal = new int[n]; + + String nowString = br.readLine(); + String goalString = br.readLine(); + + for (int i = 0; i < n; i++) { + now[i] = nowString.charAt(i) - '0'; + goal[i] = goalString.charAt(i) - '0'; + } + + int resultWithoutFirst = solve(now, goal, n, false); + int resultWithFirst = solve(now, goal, n, true); + + int answer = Math.min(resultWithoutFirst, resultWithFirst); + if (answer == Integer.MAX_VALUE) { + System.out.println(-1); + } else { + System.out.println(answer); + } + } +} diff --git "a/all_part_2/\353\254\270\355\231\230\355\235\254/\354\240\220\355\224\204.java" "b/all_part_2/\353\254\270\355\231\230\355\235\254/\354\240\220\355\224\204.java" new file mode 100644 index 0000000..9465f28 --- /dev/null +++ "b/all_part_2/\353\254\270\355\231\230\355\235\254/\354\240\220\355\224\204.java" @@ -0,0 +1,39 @@ +import java.io.*; +import java.util.*; + +public class 점프 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + int n = Integer.parseInt(br.readLine()); + int[][] map = new int[n][n]; + long[][] dp = new long[n][n]; + + for (int i = 0; i < n; i++) { + map[i] = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); + } + + dp[0][0] = 1; + + for(int i = 0; i < n; i++) { + for(int j = 0; j < n; j++) { + if(dp[i][j] >= 1 && map[i][j] != 0) { + + if(j + map[i][j] < n) { + dp[i][j + map[i][j]] += dp[i][j]; + } + if(i + map[i][j] < n) { + dp[i + map[i][j]][j] += dp[i][j]; + } + } + } + } + + bw.write(dp[n - 1][n - 1] + "\n"); + + bw.flush(); + bw.close(); + br.close(); + + } +} \ No newline at end of file diff --git "a/all_part_2/\353\254\270\355\231\230\355\235\254/\355\232\214\354\240\204_\354\264\210\353\260\245.java" "b/all_part_2/\353\254\270\355\231\230\355\235\254/\355\232\214\354\240\204_\354\264\210\353\260\245.java" new file mode 100644 index 0000000..e5510f3 --- /dev/null +++ "b/all_part_2/\353\254\270\355\231\230\355\235\254/\355\232\214\354\240\204_\354\264\210\353\260\245.java" @@ -0,0 +1,69 @@ +import java.io.*; +import java.util.Deque; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Set; + +public class 회전_초밥 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + + String[] input = br.readLine().split(" "); + int n = Integer.parseInt(input[0]); + int d = Integer.parseInt(input[1]); + int k = Integer.parseInt(input[2]); + int c = Integer.parseInt(input[3]); + + int[] belt = new int[n]; + int[] counts = new int[d + 1]; + + + for(int i = 0; i < n; i++) { + belt[i] = Integer.parseInt(br.readLine()); + } + int answer = 0; + Deque window = new LinkedList<>(); + + int current = 0; + + + for (int i = 0; i < k; i++) { + int sushi = belt[i]; + window.addLast(sushi); + if (counts[sushi] == 0) { + current++; + } + counts[sushi]++; + } + answer = counts[c] == 0 ? current + 1 : current; + + for(int i = 1; i < n; i++) { + + int removed = window.removeFirst(); + counts[removed]--; + if(counts[removed] == 0) { + current--; + } + + int addNew = belt[(i + k - 1) % n]; + window.addLast(addNew); + if(counts[addNew] == 0) { + current++; + } + + counts[addNew]++; + + int res = counts[c] == 0 ? current + 1 : current; + answer = Math.max(answer, res); + + } + + bw.write(answer + "\n"); + + bw.flush(); + bw.close(); + br.close(); + + } +} \ No newline at end of file diff --git "a/all_part_3/\353\254\270\355\231\230\355\235\254/\354\226\264\353\221\220\354\232\264_\352\265\264\353\213\244\353\246\254.java" "b/all_part_3/\353\254\270\355\231\230\355\235\254/\354\226\264\353\221\220\354\232\264_\352\265\264\353\213\244\353\246\254.java" new file mode 100644 index 0000000..c683055 --- /dev/null +++ "b/all_part_3/\353\254\270\355\231\230\355\235\254/\354\226\264\353\221\220\354\232\264_\352\265\264\353\213\244\353\246\254.java" @@ -0,0 +1,29 @@ +import java.io.*; +import java.util.*; + +public class 어두운_굴다리 { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int answer = 0; + + Deque dq = new ArrayDeque(); + + int n = Integer.parseInt(br.readLine()); + int m = Integer.parseInt(br.readLine()); + StringTokenizer st = new StringTokenizer(br.readLine()); + for (int i = 0; i < m; i++) { + dq.addLast(Integer.parseInt(st.nextToken())); + } + int[] arr = dq.stream().mapToInt(Integer::intValue).toArray(); + int gap = 0; + + for (int i = 1; i < arr.length; i++) { + gap = Math.max(gap, arr[i] - arr[i - 1]); + } + + answer = Math.max(Math.max((gap + 1) / 2, arr[0]), n - arr[arr.length - 1]); + + System.out.println(answer); + } +} diff --git "a/all_part_3/\353\254\270\355\231\230\355\235\254/\354\271\264\353\223\234\355\225\251\354\262\264\353\206\200\354\235\264.java" "b/all_part_3/\353\254\270\355\231\230\355\235\254/\354\271\264\353\223\234\355\225\251\354\262\264\353\206\200\354\235\264.java" new file mode 100644 index 0000000..d78dcf3 --- /dev/null +++ "b/all_part_3/\353\254\270\355\231\230\355\235\254/\354\271\264\353\223\234\355\225\251\354\262\264\353\206\200\354\235\264.java" @@ -0,0 +1,35 @@ +import java.io.*; +import java.util.Arrays; +import java.util.PriorityQueue; +import java.util.StringTokenizer; + +public class 카드합체놀이 { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String[] input = br.readLine().split(" "); + int n = Integer.parseInt(input[0]); + int m = Integer.parseInt(input[1]); + PriorityQueue pq = new PriorityQueue<>(); + StringTokenizer st = new StringTokenizer(br.readLine()); + for(int i = 0; i < n; i++) { + pq.add(Long.parseLong(st.nextToken())); + } + + for(int i = 0; i < m; i++) { + long p = pq.poll(); + long q = pq.poll(); + for(int j = 0; j < 2; j++) { + pq.add(p + q); + } + } + + long answer = 0; + for(long i : pq) { + answer += i; + } + + + System.out.println(answer); + } +} diff --git "a/all_part_3/\353\254\270\355\231\230\355\235\254/\355\214\214\355\213\260.java" "b/all_part_3/\353\254\270\355\231\230\355\235\254/\355\214\214\355\213\260.java" new file mode 100644 index 0000000..ede6813 --- /dev/null +++ "b/all_part_3/\353\254\270\355\231\230\355\235\254/\355\214\214\355\213\260.java" @@ -0,0 +1,76 @@ +import java.io.*; +import java.util.*; + +public class 파티 { + + static class Edge { + int to; + long time; // time을 long으로 변경 + Edge(int to, long time) { + this.to = to; + this.time = time; + } + } + + 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 M = Integer.parseInt(st.nextToken()); + int X = Integer.parseInt(st.nextToken()); + + List[] graph = new ArrayList[N + 1]; + List[] reverseGraph = new ArrayList[N + 1]; + + for (int i = 1; i <= N; i++) { + graph[i] = new ArrayList<>(); + reverseGraph[i] = new ArrayList<>(); + } + + for (int i = 0; i < M; i++) { + st = new StringTokenizer(br.readLine()); + int from = Integer.parseInt(st.nextToken()); + int to = Integer.parseInt(st.nextToken()); + long time = Long.parseLong(st.nextToken()); + graph[from].add(new Edge(to, time)); + reverseGraph[to].add(new Edge(from, time)); + } + + long[] distFromX = dijkstra(graph, X, N); + long[] distToX = dijkstra(reverseGraph, X, N); + + long maxTime = 0; + for (int i = 1; i <= N; i++) { + if (i != X) { + long totalTime = distFromX[i] + distToX[i]; + maxTime = Math.max(maxTime, totalTime); + } + } + + System.out.println(maxTime); + } + + public static long[] dijkstra(List[] graph, int start, int n) { + long[] dist = new long[n + 1]; + Arrays.fill(dist, Long.MAX_VALUE); + dist[start] = 0; + + PriorityQueue pq = new PriorityQueue<>(Comparator.comparingLong(e -> e.time)); + pq.offer(new Edge(start, 0)); + + while (!pq.isEmpty()) { + Edge current = pq.poll(); + int currentNode = current.to; + + for (Edge edge : graph[currentNode]) { + if (dist[currentNode] + edge.time < dist[edge.to]) { + dist[edge.to] = dist[currentNode] + edge.time; + pq.offer(new Edge(edge.to, dist[edge.to])); + } + } + } + + return dist; + } +}