본문 바로가기

반응형

Algorithm

(105)
[ 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번 초밥을 쿠폰으로 받았다고 가정하자..
[ SWEA ] 1953. 탈주범 검거 모의 JAVA 문제 이해 탈주범은 탈주 한 시간 뒤에 맨홀 뚜껑으로 들어간다. (1곳) 터널끼리 연결되어 있는 경우에는 탈주범이 이동가능하다. 탈주범은 시간당 1의 거리를 이동 가능하다. 터널은 7가지 종류로 되어있다. 숫자 1~7은 해당 터널의 타입, 0은 터널이 없는 장소이다. 지하 터널 지도와 맨홀 뚜껑의 위치, 경과된 시간이 주어질 때 탈주범이 위치할 수 있는 장소의 개수를 계산하는 프로그램을 작성하라. 아이디어 터널클래스를 만들어서 좌표값, 터널타입을 받아들인다. BFS 프로세스 1시간 째는 무조건 맨홀 뚜껑에 위치하므로 바로 큐에 넣고 방문처리(따로배열 x 맵자체로) 체크를 시작한다. 맨홀 뚜껑 위치의 터널 종류를 체크한다. 해당 종류에 따라 터널이 존재한다면 다음에 탐색할 터널의 위치, 터널의 타입을 큐에..

반응형