https://www.acmicpc.net/problem/21608
๋ฌธ์
์์ด ์ด๋ฑํ๊ต์๋ ๊ต์ค์ด ํ๋ ์๊ณ , ๊ต์ค์ N×N ํฌ๊ธฐ์ ๊ฒฉ์๋ก ๋ํ๋ผ ์ ์๋ค. ํ๊ต์ ๋ค๋๋ ํ์์ ์๋ N2๋ช ์ด๋ค. ์ค๋์ ๋ชจ๋ ํ์์ ์๋ฆฌ๋ฅผ ์ ํ๋ ๋ ์ด๋ค. ํ์์ 1๋ฒ๋ถํฐ N2๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๊ณ , (r, c)๋ rํ c์ด์ ์๋ฏธํ๋ค. ๊ต์ค์ ๊ฐ์ฅ ์ผ์ชฝ ์ ์นธ์ (1, 1)์ด๊ณ , ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ซ ์นธ์ (N, N)์ด๋ค.
์ ์๋์ ํ์์ ์์๋ฅผ ์ ํ๊ณ , ๊ฐ ํ์์ด ์ข์ํ๋ ํ์ 4๋ช ๋ ๋ชจ๋ ์กฐ์ฌํ๋ค. ์ด์ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ์ด์ฉํด ์ ํด์ง ์์๋๋ก ํ์์ ์๋ฆฌ๋ฅผ ์ ํ๋ ค๊ณ ํ๋ค. ํ ์นธ์๋ ํ์ ํ ๋ช ์ ์๋ฆฌ๋ง ์์ ์ ์๊ณ , |r1 - r2| + |c1 - c2| = 1์ ๋ง์กฑํ๋ ๋ ์นธ์ด (r1, c1)๊ณผ (r2, c2)๋ฅผ ์ธ์ ํ๋ค๊ณ ํ๋ค.
- ๋น์ด์๋ ์นธ ์ค์์ ์ข์ํ๋ ํ์์ด ์ธ์ ํ ์นธ์ ๊ฐ์ฅ ๋ง์ ์นธ์ผ๋ก ์๋ฆฌ๋ฅผ ์ ํ๋ค.
- 1์ ๋ง์กฑํ๋ ์นธ์ด ์ฌ๋ฌ ๊ฐ์ด๋ฉด, ์ธ์ ํ ์นธ ์ค์์ ๋น์ด์๋ ์นธ์ด ๊ฐ์ฅ ๋ง์ ์นธ์ผ๋ก ์๋ฆฌ๋ฅผ ์ ํ๋ค.
- 2๋ฅผ ๋ง์กฑํ๋ ์นธ๋ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ ํ์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ์นธ์ผ๋ก, ๊ทธ๋ฌํ ์นธ๋ ์ฌ๋ฌ ๊ฐ์ด๋ฉด ์ด์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ์นธ์ผ๋ก ์๋ฆฌ๋ฅผ ์ ํ๋ค.
์๋ฅผ ๋ค์ด, N = 3์ด๊ณ , ํ์ N2๋ช ์ ์์์ ๊ฐ ํ์์ด ์ข์ํ๋ ํ์์ด ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์.
ํ์์ ๋ฒํธ์ข์ํ๋ ํ์์ ๋ฒํธ4 | 2, 5, 1, 7 |
3 | 1, 9, 4, 5 |
9 | 8, 1, 2, 3 |
8 | 1, 9, 3, 4 |
7 | 2, 3, 4, 8 |
1 | 9, 2, 5, 7 |
6 | 5, 2, 3, 4 |
5 | 1, 9, 2, 8 |
2 | 9, 3, 1, 4 |
๊ฐ์ฅ ๋จผ์ , 4๋ฒ ํ์์ ์๋ฆฌ๋ฅผ ์ ํด์ผ ํ๋ค. ํ์ฌ ๊ต์ค์ ๋ชจ๋ ์นธ์ ๋น ์นธ์ด๋ค. 2๋ฒ ์กฐ๊ฑด์ ์ํด ์ธ์ ํ ์นธ ์ค์์ ๋น์ด์๋ ์นธ์ด ๊ฐ์ฅ ๋ง์ ์นธ์ธ (2, 2)์ด 4๋ฒ ํ์์ ์๋ฆฌ๊ฐ ๋๋ค.
4 | ||
๋ค์ ํ์์ 3๋ฒ์ด๋ค. 1๋ฒ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์นธ์ (1, 2), (2, 1), (2, 3), (3, 2) ์ด๋ค. ์ด ์นธ์ ๋ชจ๋ ๋น์ด์๋ ์ธ์ ํ ์นธ์ด 2๊ฐ์ด๋ค. ๋ฐ๋ผ์, 3๋ฒ ์กฐ๊ฑด์ ์ํด (1, 2)๊ฐ 3๋ฒ ํ์์ ์๋ฆฌ๊ฐ ๋๋ค.
3 | ||
4 | ||
๋ค์์ 9๋ฒ ํ์์ด๋ค. 9๋ฒ ํ์์ด ์ข์ํ๋ ํ์์ ๋ฒํธ๋ 8, 1, 2, 3์ด๊ณ , ์ด ์ค์ 3์ ์๋ฆฌ์ ์์์๋ค. ์ข์ํ๋ ํ์์ด ๊ฐ์ฅ ๋ง์ด ์ธ์ ํ ์นธ์ (1, 1), (1, 3)์ด๋ค. ๋ ์นธ ๋ชจ๋ ๋น์ด์๋ ์ธ์ ํ ์นธ์ด 1๊ฐ์ด๊ณ , ํ์ ๋ฒํธ๋ 1์ด๋ค. ๋ฐ๋ผ์, 3๋ฒ ์กฐ๊ฑด์ ์ํด (1, 1)์ด 9๋ฒ ํ์์ ์๋ฆฌ๊ฐ ๋๋ค.
9 | 3 | |
4 | ||
์ด๋ฒ์ ์๋ฆฌ๋ฅผ ์ ํ ํ์์ 8๋ฒ ํ์์ด๋ค. (2, 1)์ด 8๋ฒ ํ์์ด ์ข์ํ๋ ํ์๊ณผ ๊ฐ์ฅ ๋ง์ด ์ธ์ ํ ์นธ์ด๊ธฐ ๋๋ฌธ์, ์ฌ๊ธฐ๊ฐ ๊ทธ ํ์์ ์๋ฆฌ์ด๋ค.
9 | 3 | |
8 | 4 | |
7๋ฒ ํ์์ ์๋ฆฌ๋ฅผ ์ ํด๋ณด์. 1๋ฒ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์นธ์ (1, 3), (2, 3), (3, 1), (3, 2)๋ก ์ด 4๊ฐ๊ฐ ์๊ณ , ๋น์ด์๋ ์นธ๊ณผ ๊ฐ์ฅ ๋ง์ด ์ธ์ ํ ์นธ์ (2, 3), (3, 2)์ด๋ค. ํ์ ๋ฒํธ๊ฐ ์์ (2, 3)์ด 7๋ฒ ํ์์ ์๋ฆฌ๊ฐ ๋๋ค.
9 | 3 | |
8 | 4 | 7 |
์ด๋ฐ์์ผ๋ก ํ์์ ์๋ฆฌ๋ฅผ ๋ชจ๋ ์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
9 | 3 | 2 |
8 | 4 | 7 |
5 | 6 | 1 |
์ด์ ํ์์ ๋ง์กฑ๋๋ฅผ ๊ตฌํด์ผ ํ๋ค. ํ์์ ๋ง์กฑ๋๋ ์๋ฆฌ ๋ฐฐ์น๊ฐ ๋ชจ๋ ๋๋ ํ์ ๊ตฌํ ์ ์๋ค. ํ์์ ๋ง์กฑ๋๋ฅผ ๊ตฌํ๋ ค๋ฉด ๊ทธ ํ์๊ณผ ์ธ์ ํ ์นธ์ ์์ ์ข์ํ๋ ํ์์ ์๋ฅผ ๊ตฌํด์ผ ํ๋ค. ๊ทธ ๊ฐ์ด 0์ด๋ฉด ํ์์ ๋ง์กฑ๋๋ 0, 1์ด๋ฉด 1, 2์ด๋ฉด 10, 3์ด๋ฉด 100, 4์ด๋ฉด 1000์ด๋ค.
ํ์์ ๋ง์กฑ๋์ ์ด ํฉ์ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N2๊ฐ์ ์ค์ ํ์์ ๋ฒํธ์ ๊ทธ ํ์์ด ์ข์ํ๋ ํ์ 4๋ช ์ ๋ฒํธ๊ฐ ํ ์ค์ ํ๋์ฉ ์ ์๋์ด ์๋ฆฌ๋ฅผ ์ ํ ์์๋๋ก ์ฃผ์ด์ง๋ค.
ํ์์ ๋ฒํธ๋ ์ค๋ณต๋์ง ์์ผ๋ฉฐ, ์ด๋ค ํ์์ด ์ข์ํ๋ ํ์ 4๋ช ์ ๋ชจ๋ ๋ค๋ฅธ ํ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ํ์์ ๋ฒํธ, ์ข์ํ๋ ํ์์ ๋ฒํธ๋ N2๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ์ด๋ค ํ์์ด ์๊ธฐ ์์ ์ ์ข์ํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํ์์ ๋ง์กฑ๋์ ์ด ํฉ์ ์ถ๋ ฅํ๋ค.
๊ณจ๋ 5..์ด์ง๋ง ์ฒด๊ฐ์ ๋ ์ด๋ ค์ด ๋นก๊ตฌํ ๋ฌธ์ ์ด๋ค
์๋ฎฌ๋ ์ด์ + bfs ๊ธฐ๋ฒ ์์ฉ ๋๋์ธ๋ฏ??
์ผ์ฑ SW ์ญ๋ํ ์คํธ ๊ธฐ์ถ ๋ฌธ์ ๋ผ๊ณ ํ๋ค.
์ค๋๋ง์ ์ง์ง ๊ฐ๋ ์์กํ๋ ๋ฌธ์ ๋ฅผ ์ ํด์ ๋ฉ๋ถ์ด ์๋๋ฐ,.. ๋ค๋ฅธ ์ฌ๋ ์ฝ๋ ๋ณด๊ณ ์๊ณ ๋ฆฌ์ฆ์ ์ฐจ๊ทผ์ฐจ๊ทผ ์ข ์ด์ ํ๊ฐ๊ธฐ๋ฉฐ(?) ์ดํดํ๋ค
์ผ๋จ ์ค์ํ๊ฑด BFS ์ขํ ๋ฌธ์ ์ฒ๋ผ dx, dy ์ํ์ข์ฐ ์ขํ ์ด๋์ ์ด์ฉํ๋ ๊ฒ์ ๋ ์ฌ๋ฆฌ๋ ๊ฒ์ด๋ค!!!
๊ทธ๋ฆฌ๊ณ ๋ฒ์ ์ฒดํฌ๋ ํ์๋ก ํด์ฃผ๋ฉด ๋จ
์ฝ๋์ ์ฒซ ๋ฐ๋ณต๋ฌธ์์๋ ํ์์ ์ง์ ํ๊ณ ,
๋๋ฒ์งธ & ์ธ๋ฒ์งธ ๋ฐ๋ณต๋ฌธ์์๋ ์๋ฆฌ๋ฅผ ์ง์ ํ๋ฉด ๋๋ค
1. ์ง๋ชฉํ ์๋ฆฌ์ ์ฌ๋์ด ์๋ค๋ฉด ๋น์ฐํ skipํด์ผ๊ฒ ์ง
2. ์ง๋ชฉํ ์๋ฆฌ๋ง๋ค ์ํ์ข์ฐ๋ฅผ ํ์ธํด์ผ ํ๋ค. ๋น์ฐํ ๋ฒ์ ๋ฐ์ด๋ผ๋ฉด skipํด์ค๋ค.
3. ์/ํ/์ข/์ฐ ๊ฐ ๋น์ด์๊ฑฐ๋, ์ข์ํ๋ ์น๊ตฌ๊ฐ ์์์์ ๋๋ ๋ณ์๋ฅผ +1 ํด์ค๋ค
4. ์ํ์ข์ฐ ๋ชจ๋ ํ๋จ ํ, ๋ณ์ ๊ฐ์ด max ๊ฐ์ด๋ผ๋ฉด ๋์ฒด, ์๋๋ผ๋ฉด ๊ทธ๋ฅ ๊ฑด๋๋ฐ๊ธฐ
5. max ๊ฐ์ธ ์ขํ๋ก ํ์์ ๋ฐฐ์นํด์ค๋ค.
๋์ ํ์ด
// ์์ด ์ด๋ฑํ๊ต
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int seat[21][21];
int stds[401];
int like[401][4];
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
int satis = 0;
int main(){
cin >> n;
for (int i = 0; i < n*n; ++i){
cin >> stds[i];
for (int j = 0; j < 4; ++j){
cin >> like[stds[i]][j];
}
}
seat[1][1] = stds[0];
for (int s = 1; s < n * n;++s){
int nowStudent = stds[s];
int maxEmpty = -1;
int maxLove = -1;
int x = -1;
int y = -1;
for (int i = 0; i < n; ++i){
for (int j = 0; j < n; ++j){
if(seat[i][j]!=0) continue; // ์๋ฆฌ๊ฐ ์ฐจ์์ ๊ฒฝ์ฐ ์คํต
int empty = 0;
int love = 0;
for (int d = 0; d < 4;++d){
int nx = j + dx[d];
int ny = i + dy[d];
if(nx<0||ny<0||nx>=n||ny>=n) // ๋ฒ์ ์ฒดํฌ
continue;
if(seat[ny][nx]==0){ // ๋น์ด์์๋
empty++;
continue;
}
for (int k = 0; k < 4;++k){
if(seat[ny][nx]==like[nowStudent][k]){ // ์ข์ํ๋ ์น๊ตฌ์ผ๋
love++;
break; // ์์ด๋ ๋ฌด๋ฐฉํ ๋ฏ
}
}
}
if(love > maxLove){
maxLove = love;
maxEmpty = empty;
x = j;
y = i;
} else if(love==maxLove){
if(empty > maxEmpty){
maxLove = love;
maxEmpty = empty;
x = j;
y = i;
}
}
}
}
seat[y][x] = nowStudent; // ํ์ ์๋ฆฌ ๋ฐฐ์น
}
// for (int i = 0; i < n; ++i){
// for (int j = 0; j < n;++j)
// cout << seat[i][j] << " ";
// cout << "\n";
// }
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
int student = seat[i][j]; // ๊ทธ ์๋ฆฌ์ ํ์
int love = 0; // ์ธ์ ํ ์ข์ํ๋ ํ์ ์
for (int d = 0; d < 4; ++d)
{
int nx = j + dx[d];
int ny = i + dy[d];
if (nx < 0 || ny < 0 || nx >= n || ny >= n) // ๋ฒ์ ์ฒดํฌ
continue;
for (int k = 0; k < 4; ++k)
{
if (seat[ny][nx] == like[student][k])
{ // ์ข์ํ๋ ์น๊ตฌ์ผ๋
love++;
break; // ์์ด๋ ๋ฌด๋ฐฉํ ๋ฏ
}
}
}
if (love == 1)
satis += 1;
if (love == 2)
satis += 10;
if (love == 3)
satis += 100;
if (love == 4)
satis += 1000;
}
}
cout << satis;
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 2468 : ์์ ์์ญ (bfs/dfs) (0) | 2023.04.13 |
---|---|
[C++/BOJ] 21610 : ๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ (์๋ฎฌ๋ ์ด์ ) (0) | 2023.04.05 |
[C++/BOJ] 21318 : ํผ์๋ ธ ์ฒด์กฐ (๋์ ํฉ) (0) | 2023.04.02 |
[C++/BOJ] 17179 : ์ผ์ดํฌ ์๋ฅด๊ธฐ (์ด์งํ์) (0) | 2023.03.29 |
[C++/BOJ] 2343 : ๊ธฐํ ๋ ์จ (์ด์งํ์) / ์์ (0) | 2023.03.28 |