본문 바로가기

simulation8

[백준] 17779번: 게리맨더링 2 (Java) 1. 문제설명재현시는 NxN 크기의 격자로 나타낸다. 각 칸은 구역(r, c)을 의미한다. 구역을 다섯 개의 선거구로 나눠야 하고, 한 선거구에 포함되어 있는 구역은 모두 연결되어 있어야 한다.시간 제한: 1초메모리 제한: 512MB 2. 접근 방식가능한 모든 (x, y, d1, d2) 조합을 탐색하여 각 구역을 나누기 위한 조건을 만족하는지 확인한다.경계선에 따라 5개의 구역을 나눈다. 경계선(5구역)을 먼저 설정한 뒤, 각 구역(1~4구역)의 인구를 계산한다.각 구역별 인구 차이를 계산한 뒤, 그 차이의 최소값을 갱신한다. 3. 최종 코드import java.io.*;import java.util.*;public class Main { static int n; static boolean[].. 2024. 9. 20.
[백준] 17140번: 이차원 배열과 연산 (Java) 1. 문제설명크기가 3x3인 배열 A가 있고, 이 배열의 인덱스는 1부터 시작하며, 1초가 지날 때 마다 연산이 적용된다.R 연산: 배열 A의 모든 행에 대해서 정렬을 수행한다. 행의 개수 ≥ 열의 개수인 경우에 적용된다.C 연산: 배열 A의 모든 열에 대해서 정렬을 수행한다. 행의 개수 각 행 또는 열에 있는 수의 등장 횟수를 세고, 수의 등장 횟수가 커지는 순으로, 등장 횟수가 같으면 수가 커지는 순으로 정렬한다. 그 다음에는 배열 A에 정렬된 결과를 다시 넣는다. 수와 등장 횟수를 모두 넣으며, 순서는 수가 먼저이다. (예: [3, 1, 1]은 [3, 1, 1, 2]로 변환)정렬 후 가장 긴 행 또는 열에 맞춰 다른 행이나 열의 크기가 조정되고, 남는 칸은 0으로 채워진다. 행 또는 열의 크기가 1.. 2024. 9. 19.
[백준] 16236번: 아기 상어 (Java) 1. 문제설명N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 한 칸에는 물고기가 최대 1마리 존재한다.가장 처음에 아기 상어의 크기는 2이고, 아기 상어는 1초에 상하좌우로 인접한 한 칸씩 이동한다. 아기 상어는 자신의 크기보다 큰 물고기가 있는 칸은 지나갈 수 없고, 나머지 칸은 모두 지나갈 수 있으며, 자신의 크기보다 작은 물고기만 먹을 수 있다. 크기가 같은 물고기는 먹을 수 없지만, 지나갈 수 있다.아기 상어가 어디로 이동할지 결정하는 방법은 아래와 같다.더 이상 먹을 수 있는 물고기가 공간에 없다면 아기 상어는 엄마 상어에게 도움을 요청한다.먹을 수 있는 물고기가 1마리라면, 그 물고기를 먹으러 간다.먹을 수 있는 물고기가 1마리보다 많다면, 거리가 가장 가까운 물고기를 먹으러 .. 2024. 9. 18.
[백준] 1138번: 한 줄로 서기 (Java) 1. 문제설명N명의 사람들은 한 줄로 서고, 사람들은 자기보다 큰 사람이 왼쪽에 몇 명 있었는지만을 기억한다. 각 사람들이 기억하는 정보가 주어질 때, 줄을 어떻게 서야 하는지 구한다.시간 제한: 2초메모리 제한: 128MB 2. 접근 방식줄을 나타내는 배열을 생성한다.키 작은 사람부터 차례로:자신보다 키 큰 사람이 몇 명 있는지 입력받음그 숫자만큼 빈자리 확보그 자리에 해당하는 사람을 배치배열 순서대로 출력한다. 3. 최종 코드import java.io.*;import java.util.StringTokenizer;public class Main public static void main(String[] args) throws IOException { BufferedReader br.. 2024. 9. 18.
[백준] 21610번: 마법사 상어와 비바라기 (Java) 1. 문제설명NxN 크기의 격자가 있고, 각 칸에는 바구니가 하나 있다. 이 바구니에 저장할 수 있는 물의 양에는 제한이 없다. A[r][c]는 {r, c)에 있는 바구니에 저장되어 있는 물의 양을 의미한다.격자의 범위는 (1, 1) (N, N) 이다. 1번 행과 N번 행을 연결하고, 1번 열과 N번 열을 연결한다.비바라기를 시전하면 (N, 1), (N, 2), (N-1, 1), (N-1, 2) 에 비구름이 생긴다. 구름에 이동을 M번 명령한다. i번째 이동 명령은 방향 $d_i$과 거리 $s_i$로 이루어져 있다. 방향은 인접한 8방향이 있으며, 8개의 정수로 표현한다.M번의 이동이 모두 끝난 후 바구니에 들어있는 물의 양의 합을 구한다.모든 구름이 di 방향으로 si칸 이동한다.각 구름에서 비가 내려.. 2024. 9. 18.
[백준] 8911번: 거북이 (Java) 1. 문제설명2차원 평면에서 거북이 로봇에게 내릴 수 있는 명령은 F(한 눈금 앞으로), B(한 눈금 뒤로), L(왼쪽으로 90도 화전, 방향만 바꿈), R(오른쪽으로 90도 회전, 방향만 바꿈)이 있다. 거북이가 지나간 영역을 모두 포함할 수 있는 가장 작은 직사각형의 넓이를 구하는 문제이다.시간 제한: 1초메모리 제한: 128MB 2. 접근 방식방향 배열 `dx`, `dy` 를 사용한다. (북동남서 순서)입력에 따른 좌표 게산과 방향 전환을 통해 거북이가 이동하는 영역의 최대/최소 좌표를 구한다.입력에 따른 좌표 계산F, B ⇒ x, y 좌표를 현재 방향에 따라 좌표 계산입력에 따른 방향 전환L ⇒ 방향 인덱스 : 3→2, 2→1, 1→0, 0→3 ⇒ `(g + 3) % 4`R ⇒ 방향 인덱스: 0→.. 2024. 9. 18.
[백준] 15685번: 드래곤 커브 (Java) 1. 문제설명드래곤 커브는 시작 점(x, y)에서 주어진 방향으로 직선을 그린 후, 특정 규칙에 따라 회전하며 곡선을 만들어낸다. 방향(d)과 세대(g)가 주어지면, 해당 드래곤 커브를 그린 후, 그리는 과정에서 만들어지는 1x1 정사각형이 몇 개인지 구하는 문제이다.(0 ≤ x, y ≤ 100, 0 ≤ d ≤ 3, 0 ≤ g ≤ 10)드래곤 커브의 규칙은 주어진 방향으로 1세대 드래곤 커브를 그리고, 세대별로 현재까지 그린 선분들을 뒤집은 후 90도로 회전시킨 뒤, 이를 이어서 그리는 방식이다.시간 제한: 1초메모리 제한: 512MB 2. 접근 방식참고: https://dublin-java.tistory.com/34방향 전환 (90도)0 → 1, 1 → 2, 2 → 3, 3 → 0위를 식으로 전환하면 .. 2024. 9. 17.
반응형