본문 바로가기

전체글118

[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.
[Baekjoon-Python] 20057 : 마법사 상어와 토네이도 https://www.acmicpc.net/problem/20057 접근 비율이 적힌 칸의 인덱스를 미리 계산한다. 토네이도는 x번 전진을 두 번하면 x + 1번 전진한다. y의 모래를 비율이 적힌 칸으로 모두 이동시킨 후에 남은 모래를 알파로 이동시킨다. 풀이 from sys import stdin from math import floor def tornado(r, c, d): over_amount = 0 sand, board[r][c] = board[r][c], 0 dr, dc = direction[d] tmp = 0 for i in range(9): # (1) pr, pc = p_direction[d][i] moved_sand = floor(sand * percent[i]) if is_out_of_.. 2024. 1. 23.
[Baekjoon-Python] 19238 : 스타트 택시 https://www.acmicpc.net/problem/19238 접근 bfs 탐색하여 택시 좌표에서 각각의 영역까지 거리를 구한다. 가장 가까운 승객 좌표를 찾는다. bfs 탐색하여 승객 좌표에서 목적지까지의 거리를 구한다. 연료가 충분하면 택시의 좌표를 승객의 목적지로 변경한다. 택시 -> 승객 출발지 연료 감소, 승객 출발지 -> 승객 목적지 연료 감소, 목적지에 도착하면 출발지에서 목적지까지 소모한 연료의 두 배만큼 연료 증가 풀이 from sys import stdin from collections import deque def bfs(start_r, start_c): # (1) visited = [[-1] * n for _ in range(n)] q = deque([(start_r, star.. 2024. 1. 23.