목록boj (64)
블로그 언저리인 무언가
문제 : 16236 아기 상어 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 상어가 움직이는 조건이 고정되어 있으므로 BFS를 이용해 가장 가까운 물고기를 찾아 이동해 잡아먹는 것을 반복하면 된다. 상어와 여러 물고기의 거리가 같을때 우선순위에 따라 이동하는 것만 잘 설계해주면 크게 어렵지는 않은 문제이다. Code #include #define ll long long #define INF 1e9+7 using namespace std; typedef pair pll; struct ABC{ ll x, ..
문제 : 20301 반전 요세푸스 20301번: 반전 요세푸스 첫째 줄에 정수 $N$, $K$, $M$이 주어진다. ($1 \leq N \leq 5\ 000$, $1 \leq K, M \leq N$) www.acmicpc.net 덱 자료구조를 이용해서 구현하면 실제로 사람들의 위치를 이동시켜 쉽게 구현할 수 있다. Code #include #define ll long long using namespace std; ll N, M, K, chk=1, cnt; deque dq; int main(){ cin >> N >> K >> M; for (int i=1;i
문제 : 20365 블로그2 20365번: 블로그2 neighbor 블로그를 운영하는 일우는 매일 아침 풀고 싶은 문제를 미리 정해놓고 글을 올린다. 그리고 매일 밤 각각의 문제에 대하여, 해결한 경우 파란색, 해결하지 못한 경우 빨간색으로 칠한 www.acmicpc.net 연속된 색깔들은 한 번에 색칠할 수 있으므로 각색깔 별로 묶음의 수를 구하고 둘 중 많은 쪽을 한 번에 바탕색으로 칠해준다고 생각하면 그리디 하게 접근할 수 있다. Code #include #define ll long long using namespace std; ll N, R, B; char c; int main(){ cin >> N; for (int i=0;i> a; if (a=='R' && (!i || (i && c!='R'))..
문제 : 1025 제곱수 찾기 1025번: 제곱수 찾기 첫째 줄에 N, M이 주어진다. 둘째 줄부터 N개의 줄에는 표에 적힌 숫자가 1번 행부터 N번 행까지 순서대로 한 줄에 한 행씩 주어진다. 한 행에 적힌 숫자는 1번 열부터 M번 열까지 순서대로 주어지 www.acmicpc.net 각 좌표의 위치가 등차수열을 이루도록 해야 하므로 시작 위치를 정한 다음에 좌표를 옮겨가면서 이어 붙인 정수가 제곱수인지 확인해보고 최댓값을 갱신해 출력해주면 된다. Code #include #define ll long long using namespace std; ll N, M, ans=-1; string arr[15]; ll f(ll x, ll y){ ll ret=-1; for (int i=-9;i> M; for (in..
문제 : 17085 십자가 2개 놓기 17085번: 십자가 2개 놓기 첫째 줄에 격자판의 크기 N, M (2 ≤ N, M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에 격자판의 상태가 주어진다. 항상 두 개의 십자가를 놓을 수 있는 경우만 입력으로 주어진다. www.acmicpc.net N, M의 크기가 15밖에 안되므로 단순한 구현 문제이다. 모든 칸에 대해서 십자가 크기별로 넣어봐야 하는데 총 2개의 십자가를 배치해야 하므로 재귀 함수를 이용하면 코드의 길이를 단축해서 짤 수 있다. Code #include #define ll long long using namespace std; ll N, M, ans; ll dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; string arr..
문제 : 1022 소용돌이 예쁘게 출력하기 1022번: 소용돌이 예쁘게 출력하기 첫째 줄에 네 정수 r1, c1, r2, c2가 주어진다. www.acmicpc.net [0,0], [1,1], [2,2].. 는 1, 9, 25...로 제곱수로 나타나기 때문에 [x, x]=(x*2+1)^2를 이용해 기준점으로 잡고 구현해나가면 된다. 좌표 중 절댓값이 큰 것을 기준으로 x번째 껍질에 들어가게 되는데 이때 어느 변에 있냐에 따라서 네 꼭짓점을 기준으로 더해주거나 빼면 시뮬레이션 작업 없이도 구현할 수 있다. 이후 가장 큰 값을 기준으로 setw() 함수를 이용해 공백을 출력해주면 된다. Code #include #define ll long long using namespace std; ll r1, r2, c..
문제 : 14948 군대탈출하기 14948번: 군대탈출하기 첫 줄에 각 병영의 세로 길이 n, 가로 길이 m 이 주어진다. (1 ≤ n, m ≤ 100) 다음 줄부터 차례대로 병영의 블록별 레벨 제한 k가 주어진다. (0 ≤ k ≤ 109). www.acmicpc.net 현재 기준에서 레벨 제한을 높이지 않는 것 먼저 계속 탐색하면 되므로 가중치를 레벨에 두어서 우선순위 큐에 넣고 다익스트라처럼 탐색하면 된다. 이때, 도중에 점프를 할 수 있으므로 visited배열을 3차원으로 짜서 건너뛴 적이 없다면 한번 할 수 있게 하고 도착 칸에 도달한 값 중 작은 것을 찾아 출력하면 된다. Code #include #define ll long long #define INF 1e9+7 using namespace ..