//알고리즘 1. 시뮬레이션문제 2. 입력값에 숫자 + 알파벳으로 나와서 상당히 귀찮은 문제.. -> 객체하나 만들어서 입력값 담고 리스트로 저장 3. 꼬리를 저장해야 하기 때문에 Queue 사용해서 꼬리저장하고 하나씩 빼야 함. -> 큐를 사용해서 꼬리만 잘 처리해주고, 방향계산만 잘해주면 쉽게 풀 수 있음. import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.Scanner; public class 뱀_3190 { static int N, K, L, map[][]; static int[] dr = { 0, 1, 0, -1 }; // 오 , ..
//알고리즘 1. 단순 시뮬레이션 문제 -> 구현은 크게 어렵지는 않았지만 주어진 값의 범위를 생각못하고 재귀로 풀어버리려고했음..(N값 100만) -> 재귀를 for문으로 고쳤지만 시간초과가 남. -> 알고리즘은 똑같지만 입력할 때, Scanner를 사용했는데 BufferedReader로 바꿔서 시간초과를 해결 함. -> M값이 700이하고 N값이 100만 이하기 때문에 지금 구현 한 알고리즘도 문제가 있어보임. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class..
//알고리즘 1. 탐색문제 + 약간의 아이디어 2. 치즈안에있는 0과(구멍) 치즈 밖의 공기의 구분이 필요함. 3. 가장자리에서 dfs를 돌려 공기를 방문배열에 true로 표시. 4. 가장자리에 있는 치즈 제거 5. 녹은 치즈와 0의 개수를 담는 변수 sum, cnt를 선언하여 0의 개수가 맵의 크기와 같을 때 (전부 다 녹음), 기저조건에서 결과값을 알 수 있음. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 치즈_2636 { static int N, M, map[][], ans, time; stati..
//알고리즘 1. 시뮬레이션 2. 주어진 조건에 맞춰 구현하면 됨. 3. 기본기 탄탄하게 해주는 좋은 문제라고 생각됨. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 마법사상어와토네이도_20057 { static int N, map[][], ans; static int[] dr = { -2, -1, -1, -1 }; // ㅗ 모양 static int[] dc = { 0, -1, 0, 1 }; static double[] uRatio = { 0.02, 0.1, 0.07, 0.01 }; static doub..
//알고리즘 1. 다익스트라 2. 전에 우선순위 큐를 사용해서 구현한 문제 3. 시작점과 끝점이 정해져있고 최소거리를 구하면 되기 때문에 다익스트라로 구현. package swexpertacademy; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; import java.util.PriorityQueue; public class 보급로_다익스트라 { static int T, N, map[][], Ans; static boolean[][] v; static int[] dr = { -1, 1, 0..
//알고리즘 1. 시뮬레이션문제 2. 3차원 방문배열을 사용해서 질량, 속력, 개수를 저장함. 3. 개수가 1개 이상일 경우 모두다 홀수or 짝수일 경우를 구해야 하기 때문에 기존에 들어와 있는값하고 현재값의 짝,홀이 다를 경우 Max_value로 값을 초기화 하여 판단 함. import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class 마법사상어와파이어볼_20056 { static int N, M, K, map[][][], ans; static int dr[] = { -1, -1, 0, 1, 1, 1, 0, -1 }; static int dc[] = { 0, 1, 1, 1, 0, -1, -1, -1 }; ..
//알고리즘 1. dfs문제 2. 주어진 입력자료를 연결리스트로 만들기 3. 부분집합을 구함. 4. 부분집합으로 각각 선택 된 선거구가 연결되어 있는지 확인(dfs) import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class 게리맨더링_17471 { static int arr[], N, Ans = Integer.MAX_VALUE; static boolean[] v; static ArrayList[] list; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N ..
//알고리즘 1. 분할정복. 2. 재귀를 이용하여 분할정복을 구현함. import java.util.Scanner; public class z_1074 { static int N, r, c, map[][], div, Ans; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); r = sc.nextInt(); c = sc.nextInt(); div = (int) Math.pow(2, N); cal(1, r, c); } private static void cal(int idx, int r, int c) { if (idx == N) { int nr = Math.abs(r) % 2; int n..
//알고리즘 1. 아이디어 문제 2. 걸리는 시간이 적은 순서로 정렬한 후 더해주면 정답임. import java.util.Arrays; import java.util.Scanner; public class ATM { static int N, P[], ans; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); P = new int[N]; for (int i = 0; i < N; i++) { P[i] = sc.nextInt(); } Arrays.sort(P); // 배열을 작은순으로 정렬해야함. // 2중 포문으로 현재값 + 0번부터 현재의 전까지 합. for (int i = 0; i ..
//알고리즘 1. 완전탐색 문제 + 백트래킹 2. 모든 점들을 돌면서 주어진 모양을 대입해서 가격을 구해야 함. -> 'ㅜ' 생긴 모양 빼고는 주어진 좌표에서 깊이가 3인 dfs탐색을 하면 모든 모양을 만들어 낼 수 있음. 3. 'ㅜ'모양만 따로 처리해주면 쉽게 풀 수 있음. 4. dfs탐색으로 모양을 만들어낼 수 있다는 아이디어가 해결방법. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 테트로미노_14500 { static int N, M, map[][], ans; static int[] dr = { ..