알고리즘
-
[백준]14500. 테트로미노 (Java)알고리즘/백준 2021. 9. 3. 15:04
💡 문제 분석/** * 1. 테트로미노 5가지, 회전 4방향, 대칭, 총 40가지 * 2. 모든 칸을 순회하면서 40가지 테트로미노를 전부 계산해본다. */ ⌨️ 코드JAVAimport java.io.*; import java.util.*; public class Q14500 { private static int[][] dy = { {0, 0, 0}, {1, 2, 3}, {0, 1, 1}, {1, 2, 2}, {1, 2, 2}, {1, 1, 1}, {1, 1, 1}, {1, 1, 2}, {1, 1, 2}, {0, 1, 1}, {0, 1, 1}, {0, 0, 1}, {1, 1, 1}, {1, 2, 1}, {1, 2, 1}, {0, 0, 1}, {0, 0, 1}, {0, 1, 2}, {0, 1, 2} }; ..
-
[백준]13549. 숨바꼭질3 (Java)알고리즘/백준 2021. 9. 3. 15:04
💡 문제 분석/** * 1. 2 * x의 위치로 순간이동 할 때는 시간을 소모하지 않기 때문에 bfs를 하면서 주의해야한다. * 2. bfs는 시작지점을 기준으로 가장 처음 발견한 것이 최단 거리라는 것을 이용해 진행하게 되는데, * 순간이동을 시간 소모없이 하게 되면 뒤에 들어온 값이 최단 거리가 될 수 있기 때문에 * 다익스트라를 사용하거나 다른 방법보다 순간이동을 먼저 큐에 넣어준다. */ ⌨️ 코드JAVAimport java.io.*; import java.util.*; public class Q13549 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int K =..
-
[백준]12886. 돌 그룹 (Java)알고리즘/백준 2021. 9. 3. 15:04
💡 문제 분석/** * 1. 세 그룹의 돌 총합이 3등분이 안되면 false * 2. 10, 15, 35 -> 20, 20, 20으로 만들어야 됨 * - 세 개 중에 2개 고르기 * - 고른 돌을 연산해서 3크기 배열로 bfs * - 20, 20, 20이 나오면 성공, 안나오면 실패 */ ⌨️ 코드JAVAimport java.io.*; import java.util.*; public class Q12886 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int[] start = new int[3]; // 숫자 2개를 알면 한개는 자동으로 정해지기 때문에 2개만 저장 boolean[][] visited = new ..
-
[백준]12851. 숨바꼭질2 (Java)알고리즘/백준 2021. 9. 3. 15:04
💡 문제 분석/** * 1. 이동할 수 있는 3가지 방법으로 bfs 탐색을 시도한다. * 2. bfs 도중 동생의 위치를 찾았을 때, 현재 시도 중인 횟수가 끝날 때 까지 동생을 찾는 다른 방법이 있다면 카운트 * 3. 갈 수 있는 다음 수를 찾을 때마다 visit 배열을 체크하면, 최단 시간 방법의 경우의 수가 줄어들기 때문에, 저장해놨다가 한꺼번에 갱신 */ ⌨️ 코드JAVAimport java.io.*; import java.util.*; public class Q12851 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int K = sc.nextInt(); bool..
-
[백준]11000. 강의실 배정 (Java)알고리즘/백준 2021. 9. 3. 15:04
💡 문제 분석/** * 1. 시작하는 시간, 끝나는 시간을 시작인지 끝인지 표시 후 리스트에 저장 * 2. 오름차순으로 정렬 후, 시작 시간이면 cnt++, 끝나는 시간이면 cnt--를 한다. * 3. 시작 시간과 종료 시간이 같으면 둘 다 할 수 있기 때문에, 시작하기 전에 종료 시간을 먼저 처리해주어야 한다. */ ⌨️ 코드JAVAimport java.io.*; import java.util.*; public class Q11000 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); List time = new ArrayList(); for(int i = 0; i < N;..
-
[백준]11985. 오렌지 출하 (Java)알고리즘/백준 2021. 9. 3. 15:03
💡 문제 분석/** * cache[N] = N개의 오렌지를 포장하는데 필요한 최소 비용 * cache[N] = cache[N - i] + 오렌지 i개 포장 비용 */ ⌨️ 코드JAVAimport java.io.*; import java.util.*; public class Q11985 { static long[] cache; static int[] orange; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int M = sc.nextInt(); int K = sc.nextInt(); cache = new long[N + 1]; orange = new int[N + 1]; ..
-
[백준]11559. Puyo Puyo (Java)알고리즘/백준 2021. 9. 3. 15:03
💡 문제 분석 /** * 1. 모든 칸을 순회하면서 bfs로 4개 이상이 모여 있는 것을 찾습니다. * 2. 다 찾은 다음에 한번에 터뜨려야 하기 때문에, 별도의 공간에 저장해놓습니다 * 3. 모든 칸 순회가 끝나고, 저장해놓았던 뿌요를 터뜨립니다. * 4. 뿌요 밑에 빈칸이 있다면 밑으로 내립니다. */ ⌨️ 코드 JAVA import java.io.*; import java.util.*; public class Q11559 { static boolean[][] visited; static char[][] board; static ArrayList list = new ArrayList(); static int[] dy = {-1, 0, 1, 0}; static int[] dx = {0, 1, 0, -1..
-
[백준]10216. Count Circle Groups (Java)알고리즘/백준 2021. 9. 3. 15:03
💡 문제 분석/** * 1. 적군의 좌표를 가지고 그래프를 만들어서, 모든 적군을 순회하면서 그래프 탐색이 몇번 일어나는지 카운트하는 방법 * 2. 유니온 - 파인드 자료구조를 만들어서, 루트의 개수를 세는 방법 */ ⌨️ 코드JAVAimport java.io.*; import java.util.*; public class Q10216 { static int N; static List[] adj; static Enemy[] enemies; static boolean[] check; public static void main(String[] args){ Scanner sc = new Scanner(System.in); int tc = sc.nextInt(); // tc번 반복 while(tc-- > 0) ..