본문 바로가기

반응형

Algorithm/BOJ

(39)
[ BOJ ] 1009. 분산처리 B3 (JAVA) 1009번: 분산처리 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000) www.acmicpc.net 문제 이해 - 총 데이터의 개수는 a^b의 개로 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000) - 마지막 데이터가 처리될 컴퓨터 번호를 구한다. 아이디어 - 중요한 건 숫자의 마지막 자리가 뭐냐에 따라 컴퓨터 번호가 바뀐다. - 총 10대의 컴퓨터가 있으므로 mod 10을 통해 끝자리를 구해준다. - 다시 말하지만 끝자리가 우리의 관심사기 때문에, 끝자리에 다시 a를 곱해도 마지막 자리는 나온다. - 만약 0이면 10번컴퓨터이다. 코드 import ..
[ BOJ ] 17144. 미세먼지 안녕! G5 JAVA 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 문제 이해 공기청정기는 항상 1번 열에 설치되어 있고, 크기는 두 행을 차지한다. 공기청정기가 설치되어 있지 않은 칸에는 미세먼지가 있고, (r, c)에 있는 미세먼지의 양은 Ar,c이다. 1초 동안 아래 적힌 일이 순서대로 일어난다. 미세먼지가 확산된다. 확산은 미세먼지가 있는 모든 칸에서 동시에 일어난다. (r, c)에 있는 미세먼지는 인접한 네 방향으로 확산된다. 인접한 방향에 공기청정기가 있거나, 칸이 없으면 그 방향으로는 확산이 일어나지 않는다. 확산되..
[ BOJ ] 17471. 게리맨더링 G5 JAVA 17471번: 게리맨더링 선거구를 [1, 4], [2, 3, 5, 6]으로 나누면 각 선거구의 인구는 9, 8이 된다. 인구 차이는 1이고, 이 값보다 더 작은 값으로 선거구를 나눌 수는 없다. www.acmicpc.net 문제 이해 - 백준시는 N개의 구역으로 나누어져 있고, 구역은 1번부터 N번까지 번호가 매겨져 있다. - 구역을 2개의 선거구로 나눠야 하며, 각 구역은 두 선거구 중 하나에 포함되어야 한다. - 선거구는 구역을 적어도 하나 포함해야하고, 한 선거구에 포함되어 있는 구역들은 모두 연결되어 있어야 한다. - 구역 A에서 인접한 구역을 통해서 구역 B로 갈 수 있을 때 두 구역은 연결되어 있다고 한다. - 공평한 선거구 나누기를 위해 두 선거구에 포함된 인구의 차이를 최소로 한다. 아이디..
[ BOJ ] 2564. 경비원 S1 JAVA 문제 이해 예를 들어 가로의 길이가 10, 세로의 길이가 5인 블록의 경계에 무인 경비를 의뢰한 3개의 상점이 있다고 하자. 과 같이 이들은 1, 2, 3으로 표시되어 있고, 동근이는 X로 표시한 위치에 있다. 첫째 줄에 동근이의 위치와 각 상점 사이의 최단 거리의 합을 출력한다. 아이디어 시계방향대로 거리를 구하고 마지막에 반시계방향이랑 비교해서 더 작은 값을 지정한다. 참고로 반시계방향은 전체거리 - 시계방향하면 된다. 북쪽 동쪽 남쪽 서쪽 코드 package bj.silver; import java.io.*; import java.util.*; /* * 시계 방향일때 * 1: 북 -> val * 2: 남 -> N*2 + M - val * 3: 서 -> 2(M+N) - val * 4: 동 -> N +..
[ BOJ ] 16562. 친구비 G3 JAVA 문제 이해 학생 i에게 Ai만큼의 돈을 주면 그 학생은 1달간 친구가 되어준다! 준석이에게는 총 k원의 돈이 있고 그 돈을 이용해서 친구를 사귀기로 했다. 막상 친구를 사귀다 보면 돈이 부족해질 것 같다는 생각을 하게 되었다. 그래서 준석이는 “친구의 친구는 친구다”를 이용하기로 했다. 준석이는 이제 모든 친구에게 돈을 주지 않아도 된다! 위와 같은 논리를 사용했을 때, 가장 적은 비용으로 모든 사람과 친구가 되는 방법을 구하라. 아이디어 전형적인 union-find문제 같아서 그걸로 풀었다. union은 오름차순으로 해야지 최소비용순 연결된다. 코드 import java.io.*; import java.util.*; public class Main { static int[] p,val; public s..
[ BOJ ] 15961. 회전 초밥 G4 JAVA 문제 이해 새로 문을 연 회전 초밥 음식점이 불경기로 영업이 어려워서, 다음과 같이 두 가지 행사를 통해서 매상을 올리고자 한다. 원래 회전 초밥은 손님이 마음대로 초밥을 고르고, 먹은 초밥만큼 식대를 계산하지만, 벨트의 임의의 한 위치부터 k개의 접시를 연속해서 먹을 경우 할인된 정액 가격으로 제공한다. 각 고객에게 초밥의 종류 하나가 쓰인 쿠폰을 발행하고, 1번 행사에 참가할 경우 이 쿠폰에 적혀진 종류의 초밥 하나를 추가로 무료로 제공한다. 만약 이 번호에 적혀진 초밥이 현재 벨트 위에 없을 경우, 요리사가 새로 만들어 손님에게 제공한다. 위 할인 행사에 참여하여 가능한 한 다양한 종류의 초밥을 먹으려고 한다. 위 그림의 예를 가지고 생각해보자. k=4이고, 30번 초밥을 쿠폰으로 받았다고 가정하자..

반응형