목록Study/Problem Solving (163)
전공공부
설명요즘 제대로 된 문제를 많이 풀지를 않아서 머리가 돌지 않았습니다. 풀이라고 할 것도 없는 것이 배열을 진행하면서 단순히 배수 케이스 체크 그리고, 자는 학생의 케이스 배수 케이스 체크하여서 단순히 수집 못하는 경우만 빼면 되는 쉬운 문제 였습니다. 누적합으로 풀이하는 문제가 많았지만 마땅히 떠오르지 않아 단순 구현 방식으로 풀었습니다. 코드package BOJ.prefix_sum;import java.io.*;import java.util.ArrayList;import java.util.List;import java.util.StringTokenizer;public class BOJ_20438 { public static void main(String[] args) throws IOExcep..
설명 이 전 강의실을 빼는 형태로 구현하기 위해서 PriorityQueue 내부에서는 가장 먼저 들어간 강의실을 빼는 형태로 생각하고 진행을 하였으며 이때, 새로 들어오는 강의가 이전 강의의 end 시간 보다 start 시간이 크면 PriorityQueue의 새로운 엔드포인트로 생성이 되는 것으로 생각하고 PriorityQueue를 늘리고 이런 경우가 아니고 만일, 들어오는 강의가 이전 강의의 end 시간 보다 start 시간이 작으면 이때는 강의실을 늘리지 않아도 되는 경우이므로 현재 내가 보는 강의실은 끝나는 엔드포인트로 지정하고 지금 들어온 강의를 PQ에 넣어서 상태값을 조정했습니다. 그러나, 이 모든 경우는 앞서 Arrays.sort를 통해서 강의의 순서값이 정렬이 되어 있어야 이전 상태 값이 다..
설명 간단한 그리디 문제였습니다. 연속되는 알파벳의 갯수를 구한 후 연속되는 알파벳의 List 설정을 연속된 경우를 한 경우로 치고 이를 List에 관리하여 List Size로 연속된 알파벳 갯수를 구하고 한 번에 칠해지는 경우 1 경우를 체크하여 이에 대해서 각각 B의 경우 R의 경우를 나누어서 마지막에 대소비교해서 최소로 작은 경우의 수를 출력하게끔 구성해서 풀었습니다. 코드 package BOJ.greedy; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class BOJ_20365 { public static void main..
설명 이전의 상태 값을 기억하고 최소한의 값으로 지속적인 탐색을 통해서 값을 구했습니다. O(N)이 걸렸고 정답 값이 오버플로우가 나기 때문에 long으로 설정하는 것이 중요했습니다. 코드 package BOJ.greedy; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class BOJ_13305 { public static void main(String[] args) throws Exception{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer t..
설명 코드를 간결하게 짜려고 노력했습니다. 사실 실버 4 문제라서 크게 설명이 필요 없을 듯하고 해서 최대한 간결한 형태로 짜봤습니다. 코드 package BOJ.greedy; import java.util.*; public class BOJ_1758 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); List arr = new ArrayList(); for (int i = 0; i < N; i++){ arr.add(sc.nextLong()); } arr.sort(Comparator.reverseOrder()); long ans = 0; for (int i = 0; i < a..
설명 그리디하게 풀면 되는 문제입니다. 결국 X가 4의 배수만큼 이거나 4의 나눗셈 값이 나오는 만큼 AAAA를 붙이고 짝수개의 나머지 X가 나오면 BB 또는 4의 배수이면 AAAA로 채워버리면 됩니다. 따라서, 문제의 주어진 X의 값을 가져와서 읽고 이를 선택해서 사용하면 됩니다. 만일, X가 3개라면 홀수 개라서 AAAA,BB로는 채울 수 없죠. 코드 package BOJ.greedy; import java.io.*; public class BOJ_1343 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); St..
설명 코인의 가치를 인덱스의 위치로 잡고 이에 따라서 인덱스의 위치 값에 따른 경우의 수를 구했습니다. dp[i] += dp[i - 동전의 가치] 코드 package BOJ.Dynamic_Programming; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class BOJ_2293 { static int N,K; static int[] coins; static long[] dp; private static void input() throws IOException { BufferedReader in = new Bu..
설명 DP를 활용한 문제이고 이때, 들어오는 도시마다 최소한 투자를 통해서 내가 만들어야하는 고객치를 딱 도달하는 것이 포인트 였습니다. 따라서, DP의 인덱스를 내가 최소한의 투자를 통해서 만들 수 있는 고객 유치 한계점으로 잡고 문제에 따른 조건을 만들었습니다. 나름 깔끔하게 메서드 별 역할을 나눠서 행동하게끔 구성을 해보았는데 생각보다는 별로네요. 좀 더 효율적으로 나누는 방법을 고려하는 것도 좋을 것 같습니다. 코드 package BOJ.Dynamic_Programming; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer;..