본문 바로가기

알고리즘 & 자료구조569

거리두기 확인하기 package programmers; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class 거리두기_확인하기 { //대기실은 5개이며 각 대기실은 5x5 크기 //응시자 끼리는 맨헤튼 거리가 2이하로 앉지 못한다. //응시자가 앉아있는 자리가 사이가 파티션으로 막혀있을 경우는 허용 //P : 응시자, O : 빈테이블, X : 파티션 //맨해튼 거리 2 // X // X X X // X X P X X // X X X // X //응시자 기준으로 맨해튼거리 주변 모두 탐색 //(p.y,p.x)와 (ny,nx) 사이에 파티션이 있는지 탐색 //파티션 조건 //1. 자리 사이에 파티션이 존재(찾은 P와 직선.. 2023. 3. 15.
가장 큰 정사각형 찾기 package programmers; public class 가장_큰_정사각형_찾기 { //위, 왼쪽대각, 왼쪽의 최솟값 + 1 private static int[] dy = {-1, -1, 0}; private static int[] dx = {0, -1, -1}; public static int solution(int[][] board) { go(board); int ans = find(board); return ans * ans; } private static int find(int[][] board) { int ans = -1; for (int[] nums : board) { for (int j = 0; j < board[0].length; j++) { ans = Math.max(ans, nums.. 2023. 3. 13.
전력망을 둘로 나누기 package programmers; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; public class 전력망을_둘로_나누기 { //n개의 송전탑이 전선을 통해 하나의 트리 형태로 연결 //이 전선들 중 하나를 끊어서 전력망 네트워크를 2개로 분할 //두 전력망이 갖게 되는 송전탑의 개수를 최대한 비슷하게 //2 2023. 3. 12.
택배상자 package programmers; import java.util.Stack; public class 택배상자 { public static int solution(int[] order) { int answer = 0; Stack s = new Stack(); int idx = 0; for (int i = 1; i 2023. 3. 10.
줄 서는 방법 package programmers; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class 줄_서는_방법 { public static int[] solution(int n, long k) { List list = new ArrayList(); int[] answer = new int[n]; long fn = 1; for (int i = 1; i 0) { //숫자를 고정시킨다고 가정하고 나오는 경우의 수 fn /= n; //들어갈 숫자 결정 answer[idx++] = list.get((int)(k / fn)); list.remove((int)(k / fn)); k %= fn; n--; } return.. 2023. 3. 8.
배달 package programmers; import java.util.Comparator; import java.util.PriorityQueue; public class 배달 { public static int solution(int N, int[][] road, int K) { int[] map = dijkstra(N, road, 1); int ans = 0; for (int x : map) { if (x o.distance)); q.add(new Pair(start, 0)); while (!q.isEmpty()) { Pair p = q.poll(); int distance = p.distance; int currentTown = p.town; if (distance > map[currentTown]).. 2023. 3. 7.