목록BOJ (22)
IT recording...
https://www.acmicpc.net/problem/17822 17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀 www.acmicpc.net [풀이] 1. 원판 돌리기 static void rotate(int n,int d,int K){ if(d==0){ //시계방향 for(int k=0;k=2;j--){ Map[n][j] = Map[n][j-1]; } Map[n][1] = tmp; } } else if(d==1){ //반시계방향 for(int k=0;k 주의) 평균 구할 때 double로 소숫점 살려야함 [코드] im..
https://www.acmicpc.net/problem/17837 17837번: 새로운 게임 2 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하 www.acmicpc.net [풀이] 다음과 같은 조건을 주의해야 한다. 파란색인 경우에는 A번 말의 이동 방향을 반대로 하고 한 칸 이동한다. 방향을 반대로 바꾼 후에 이동하려는 칸이 파란색인 경우에는 이동하지 않고 가만히 있는다. 체스판을 벗어나는 경우에는 파란색과 같은 경우이다. 원래 있는 칸(A) 이동하려는 칸(B)이 1. 흰색인 경우 -> 이동하려고 한 칸(B)에 그대로 이동, Arr뒤에 붙인다. 2. 빨간색인 ..
https://www.acmicpc.net/problem/17779 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름 www.acmicpc.net [풀이] 시간 제한 1초에 총 1억번 연산이다. 여기서 N은 20까지, 우리가 정해야 할 것은 1 삽가능이다. (왜 4중 for문은 안된다고만 생각했을까.. 왜 다른 범위 조건을 내가 찾아야 한다고 생각했을까.. 시간복잡도 볼껄..) 0. 문제에서 x는 row이고, y는 col이다. (헷갈려서 몇 번 엎었다.) 1. 우선 좌표 중에서 어느 점을 기준점으로 할 것인지, d1과 d2를 어떻게 설정할 것인지..
https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net [풀이] 문제에 조건이 많고, 어떻게 풀이해야 할지 감이 잘 안와서 20분 넘게 펜으로 고민해본 문제이다. 문제를 보고 상어가 이동하면서 체크해야 할 것은 "가장 가까운 거리에 위치하는 물고기 파악" 이었다. 근데 이를 어떻게 판단할 것인가? 문제에서 상어는 못 가는 곳도 있어서 운이 나쁘다면 상어는 삥 돌아가야 하는 경우가 존재할 것이다. 최단거리는 그럼 어떻게 찾을 수 있을까? 1. 처..
https://www.acmicpc.net/problem/17142 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고 www.acmicpc.net [풀이] 1. 바이러스 중 활성화 시킬 M개의 조합을 dfs를 통해 구한다. void dfs(int index, int count) , VirusVisit boolean 배열을 이용해서 조합을 구한다. static boolean[] visit = new boolean[N]; static ArrayList Active = new ArrayList(); //N개 고르기 dfs(0,0); static void ..
https://www.acmicpc.net/problem/17140 17140번: 이차원 배열과 연산 첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다. www.acmicpc.net [풀이] 1. 행 길이와 열 길이에 따라 각 초마다의 연산이 달라지니, 각 길이를 담아놓을 변수가 필요하다. 1-1. R 연산을 한다면 행 길이는 그대로고 열길이가 달라진다. 1-2. C 연산을 한다면 열 길이는 그대로고 행길이가 달라진다. 각 행,열의 길이 갱신은 모든 연산 중 가장 큰 값을 기준으로 하니, 각 행,열 연산마다 Math.max 연산을 해주며 갱신한다. 2. 갱신은 H..
https://www.acmicpc.net/problem/17143 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. www.acmicpc.net [풀이] 낚시왕을 이동시키고, 해당 열에 제일 가까운 상어를 없앤다. 상어들을 이동시킨다. (한번에 이동시켜야 하므로 Map에 바로 상어들을 이동시키지 않고, Copy를 이용하여 거기에 값들을 넣어놓는다.) Copy에 있는 상어들을 Map에 넣는다. 그 후 한 칸에 2마리 이상 있으면 제일 사이즈 큰 애만 남기고 삭제 - 사이즈 제일 큰 상어를 골라내기 위해서 PriorityQ..
https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net [풀이] 1. 존재하는 미세먼지를 확산시킨다. 한 번에 확산시켜야 하므로 모든 칸을 돌면서 Plus와 Minus를 구하고, 다 돌면 한 번에 갱신한다. 2. 공기청정기 시계방향, 반시계 방향 회전시킨다. 회전시키는게 골때린다. 일단 공기청정기는 무시하고 일반적으로 시계방향으로 회전시키는 것을 생각해보자. 1) 순환하므로 값이 사라지는 것이 존재할 것이다. 그 점을 빨간색칸이라고 해보고, 그 값을..
https://www.acmicpc.net/problem/16235 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net [풀이] 문제에 적혀있는대로 구현하면 되는 문제였다. * 봄 - 어린애부터 나이만큼 양분 먹고, 양분 못 먹는애는 여름에 죽이기 * 여름 - 봄에 양분 못 먹는애 죽이기 * 가을 - 나이가 5배수인 나무 8방으로 나이 1인 애 생성 * 겨울 - 땅에 양분 추가 A[][] 만큼 ** 주의 - 봄에 양분 못 먹는애를 바로 죽이면 안되고, 봄애 모든 애들 다 체크하고 죽일애들 모아놓고 ..
https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net [풀이] dfs를 이용하여 몇 개의 뭉텅이로 이루어져있는지를 구하는 것을 응용하는 문제였다. 생각할 부분은 1. 하루 동안에 인구이동이 일어날 때 어느 지역들이 연합을 이루는지, 각 연합의 sum -> AllArr 과 sumArr 에 각각의 값들을 담았다. 2. 총 몇일이 지날지 -> 하루 동안 인구이동이 일어나는지 볼 때 인구의 차이가 L break) 나머지는 코드 주석으로 확인하..