PS109 [Programmers-Java] 등산코스 정하기 https://school.programmers.co.kr/learn/courses/30/lessons/118669 접근 출입구의 강도를 0으로 설정한다. 출입구와 연결된 등산로를 우선순위 큐에 삽입하여 탐색한다. 다음 지점의 강도는 현재 지점까지의 강도와 다음 지점과 연결된 등산로의 강도 중 최댓값이다. 산봉우리까지의 모든 코스를 탐색한다. 산봉우리에서 내려오는 것은 생각하지 않는다. 예를 들어 1 (출입구) -> 2 -> 5 (산봉우리) 코스의 강도가 최솟값이면 해당 코스로 내려오면 된다. 어떤 지점에서 현재 코스의 강도가 이전 코스의 강도보다 크면 현재 코스를 탐색하지 않는다. 풀이 import java.util.*; class Solution { private static int MAX = Int.. 2024. 1. 24. [Programmers-Java] 가장 큰 정사각형 찾기 https://school.programmers.co.kr/learn/courses/30/lessons/12905 접근 행 + 1, 열 + 1 크기의 배열을 생성한다. 표에서 1이면 좌, 상, 좌상의 정사각형을 확인하고 그 중 최솟값 + 1을 계산한다. 정사각형의 한 변의 길이를 메모이제이션한다. 풀이 class Solution { public int solution(int[][] board) { int row = board.length + 1; int col = board[0].length + 1; int maxSide = 0; int[][] dp = new int[row][col]; for (int r = 1; r < row; r++) { for (int c = 1; c < col; c++) { if.. 2024. 1. 24. [Programmers-Java] 두 큐 합 같게 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/118667 접근 큐의 합을 미리 계산한다. 두 큐의 합을 비교하고 큰 큐에서 작은 큐로 원소를 이동시킨다. 풀이 import java.util.*; class Solution { public int solution(int[] queue1, int[] queue2) { long queue1Sum = Arrays.stream(queue1).sum(); long queue2Sum = Arrays.stream(queue2).sum(); if ((queue1Sum + queue2Sum) % 2 != 0) { // (1) return -1; } Queue q1 = generateQueue(queue1); Que.. 2024. 1. 23. [Programmers-Java] 미로 탈출 명령어 https://school.programmers.co.kr/learn/courses/30/lessons/150365 접근 두 점 p, q가 있을 때 맨해튼 거리는 |p1 - q1| + |p2 - q2|로 구한다. 맨해튼 거리가 3이고 k가 2라면 k 거리로 탈출 지점에 도달할 수 없다. 즉, 맨해튼 거리 k) { // (1) return answer; } dfs(0, x, y, ""); return answer; } private void dfs(int moveDist, int x, int y, String command) { if (!answer.equals("impossible")) return; // (2) if (k - moveDist < getManhattanDist(x, y)) return; .. 2024. 1. 23. [Programmers-Java] 택배 배달과 수거하기 https://school.programmers.co.kr/learn/courses/30/lessons/150369 접근 마지막 집부터 배달과 수거를 마쳐야 한다. 집을 뒤에서부터 순회하면서 배달과 수거를 마무리할 수 있는 왕복 횟수를 구한다. 왕복하면서 남은 배달 상자 개수, 수거 상자 개수를 앞 집으로 이전한다. 풀이 class Solution { public long solution(int cap, int n, int[] deliveries, int[] pickups) { long answer = 0; int d = 0; int p = 0; for (int i = n - 1; i > -1; i--) { // (1) int cnt = 0; d -= deliveries[i]; // (2) p -= pi.. 2024. 1. 23. [Programmers-Java] 단체사진 찍기 https://school.programmers.co.kr/learn/courses/30/lessons/1835 접근 순열로 배치의 경우의 수를 구한다. 배치가 조건에 모두 부합하는지 확인한다. 풀이 class Solution { private String[] members = new String[] { "A", "C", "F", "J", "M", "N", "R", "T" }; private boolean[] visited = new boolean[8]; private int answer; public int solution(int n, String[] data) { answer = 0; createPermutation("", data); return answer; } private void create.. 2024. 1. 23. [Programmers-Java] 배달 https://school.programmers.co.kr/learn/courses/30/lessons/12978 접근 다익스트라 알고리즘을 사용하여 1번 마을에서 각 마을에 도착하는 최소 시간을 구한다. K 시간 이하로 도착하는 마을의 개수를 구한다. 풀이 import java.util.*; class Solution { private int[][] board; private int[] distance; public int solution(int N, int[][] road, int K) { board = new int[N][N]; for (int[] r : road) { int a = r[0] - 1; int b = r[1] - 1; int c = r[2]; if (board[a][b] == 0 ||.. 2024. 1. 23. [Programmers-Java] 요격 시스템 https://school.programmers.co.kr/learn/courses/30/lessons/181188 접근 폭격 미사일을 e를 기준으로 오름차순 정렬한다. 현재 미사일의 s가 이전 미사일의 e보다 크거나 같으면 요격 미사일이 한 개 필요하다. 풀이 import java.util.Arrays; class Solution { public int solution(int[][] targets) { Arrays.sort(targets, (o1, o2) -> o1[1] - o2[1]); // (1) int x = 0; int answer = 0; for (int[] target : targets) { if (x 2024. 1. 23. [Programmers-Java] 테이블 해시 함수 https://school.programmers.co.kr/learn/courses/30/lessons/147354 접근 튜플을 정렬한다. i번째 행의 값은 i로 나눈 나머지를 구하고 모두 더한다. 범위 내의 값들을 누적하여 XOR 연산한다. 풀이 import java.util.Arrays; import java.util.stream.IntStream; class Solution { public int solution(int[][] data, int col, int row_begin, int row_end) { int[][] sortedData = sort(data, col - 1); // (1) return IntStream.range(row_begin - 1, row_end) // (2) .map(i.. 2024. 1. 23. [Baekjoon-Python] 1655 : 가운데를 말해요 https://www.acmicpc.net/problem/1655 접근 최대 힙과 최소 힙 두 개를 사용한다. 최대 힙 길이와 최소 힙 길이가 같으면 최대 힙에 삽입하고, 길이가 다르면 최소 힙에 삽입한다. 최대 힙의 최댓값을 최소 힙의 최솟값보다 작게 만든다. 최대 힙의 0번 인덱스 값이 중간 값이다. 풀이 from sys import stdin from heapq import heappush, heappop max_heap = [] min_heap = [] for _ in range(int(stdin.readline())): x = int(stdin.readline()) if len(max_heap) == len(min_heap): # (1) heappush(max_heap, x * -1) else:.. 2024. 1. 23. 이전 1 2 3 4 5 6 ··· 11 다음