์ถ์ฒ :
'19 ์นด์นด์ค ์ฝ๋ฉ ํ ์คํธ (C++) - YouTube
www.youtube.com
๋ฌธ์ |
๋ธ๋ก๊ฒ์
ํ๋ ์ฆ ๋ธ๋ก์ด๋ผ๋ ์ ๊ท ๊ฒ์์ด ์ถ์๋์๊ณ , ์ด๋ง์ด๋งํ ์๊ธ์ด ๊ฑธ๋ฆฐ ์ด๋ฒคํธ ๋ํ๊ฐ ๊ฐ์ต ๋์๋ค.
์ด ๋ํ๋ ์ฌ๋์ ๋์ ํด์ ํ๋ ์ดํ ํ๋ก๊ทธ๋จ์ผ๋ก ์ฐธ๊ฐํด๋ ๋๋ค๋ ๊ท์ ์ด ์์ด์, ๊ฒ์ ์ค๋ ฅ์ด ํํธ์๋ ํ๋ก๋๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด์ ์ฐธ๊ฐํ๊ธฐ๋ก ๊ฒฐ์ฌํ๊ณ ๊ฐ๋ฐ์ ์์ํ์๋ค.
ํ๋ก๋๊ฐ ์ฐ์นํ ์ ์๋๋ก ๋์์ ๋น ๋ฅด๊ณ ์ ํํ ํ๋ก๊ทธ๋จ์ ์์ฑํด ๋ณด์.
๊ฒ์๊ท์น
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 1ร1 ํฌ๊ธฐ์ ๋ธ๋ก์ ์ด์ด ๋ถ์ฌ ๋ง๋ 3 ์ข ๋ฅ์ ๋ธ๋ก์ ํ์ ํด์ ์ด 12๊ฐ์ง ๋ชจ์์ ๋ธ๋ก์ ๋ง๋ค ์ ์๋ค.

1 x 1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ์ด๋ฃจ์ด์ง N x N ํฌ๊ธฐ์ ๋ณด๋ ์์ ์ด ๋ธ๋ก๋ค์ด ๋ฐฐ์น๋ ์ฑ๋ก ๊ฒ์์ด ์์๋๋ค. (๋ณด๋ ์์ ๋์ธ ๋ธ๋ก์ ํ์ ํ ์ ์๋ค). ๋ชจ๋ ๋ธ๋ก์ ๋ธ๋ก์ ๊ตฌ์ฑํ๋ ์ฌ๊ฐํ๋ค์ด ์ ํํ ๋ณด๋ ์์ ์ฌ๊ฐํ์ ๋ง๋๋ก ๋์ฌ์์ผ๋ฉฐ, ์ ์์ ๊ฑธ์น๊ฑฐ๋ ๋ณด๋๋ฅผ ๋ฒ์ด๋๊ฒ ๋์ฌ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
ํ๋ ์ด์ด๋ ์์ชฝ์์ 1 x 1 ํฌ๊ธฐ์ ๊ฒ์ ๋ธ๋ก์ ๋จ์ด๋จ๋ ค ์์ ์ ์๋ค. ๊ฒ์ ๋ธ๋ก์ ํญ์ ๋งต์ ํ ์นธ์ ๊ฝ ์ฐจ๊ฒ ๋จ์ด๋จ๋ ค์ผ ํ๋ฉฐ, ์ค์ ๊ฑธ์น๋ฉด ์๋๋ค.
์ด๋, ๊ฒ์ ๋ธ๋ก๊ณผ ๊ธฐ์กด์ ๋์ธ ๋ธ๋ก์ ํฉํด ์์ด ๊ฝ ์ฑ์์ง ์ง์ฌ๊ฐํ์ ๋ง๋ค ์ ์๋ค๋ฉด ๊ทธ ๋ธ๋ก์ ์์จ ์ ์๋ค.
์๋ฅผ ๋ค์ด ๊ฒ์ ๋ธ๋ก์ ๋จ์ด๋จ๋ ค ์๋์ ๊ฐ์ด ๋ง๋ค ๊ฒฝ์ฐ ์ฃผํฉ์ ๋ธ๋ก์ ์์จ ์ ์๋ค.

๋นจ๊ฐ ๋ธ๋ก์ ๊ฐ๋ก๋ง๋ ์ฃผํฉ์ ๋ธ๋ก์ด ์์ด์ก์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋นจ๊ฐ ๋ธ๋ก๋ ์์จ ์ ์๋ค.

๊ทธ๋ฌ๋ ๋ค๋ฅธ ๋ธ๋ก๋ค์ ๊ฒ์ ๋ธ๋ก์ ๋จ์ด๋จ๋ ค ์ง์ฌ๊ฐํ์ผ๋ก ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ์์จ ์ ์๋ค.
๋ฐ๋ผ์ ์ ์์์์ ์์จ ์ ์๋ ๋ธ๋ก์ ์ต๋ 2๊ฐ์ด๋ค.
๋ณด๋ ์์ ๋์ธ ๋ธ๋ก์ ์ํ๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด board๊ฐ ์ฃผ์ด์ง ๋, ๊ฒ์ ๋ธ๋ก์ ๋จ์ด๋จ๋ ค ์์จ ์ ์๋ ๋ธ๋ก ๊ฐ์์ ์ต๋๊ฐ์ ๊ตฌํ๋ผ.
์ ํ์ฌํญ
- board๋ ๋ธ๋ก์ ์ํ๊ฐ ๋ค์ด์๋ N x N ํฌ๊ธฐ 2์ฐจ์ ๋ฐฐ์ด์ด๋ค.
- N์ 4 ์ด์ 50 ์ดํ๋ค.
- board์ ๊ฐ ํ์ ์์๋ 0 ์ด์ 200 ์ดํ์ ์์ฐ์์ด๋ค.
- 0 ์ ๋น ์นธ์ ๋ํ๋ธ๋ค.
- board์ ๋์ฌ์๋ ๊ฐ ๋ธ๋ก์ ์ซ์๋ฅผ ์ด์ฉํด ํํํ๋ค.
- ์๋ชป๋ ๋ธ๋ก ๋ชจ์์ด ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ ์๋ค.
- ๋ชจ์์ ๊ด๊ณ ์์ด ์๋ก ๋ค๋ฅธ ๋ธ๋ก์ ์๋ก ๋ค๋ฅธ ์ซ์๋ก ํํ๋๋ค.
- ์๋ฅผ ๋ค์ด ๋ฌธ์ ์ ์ฃผ์ด์ง ์์์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ด์ง๋ค.

์ ์ถ๋ ฅ ์
board |
result |
[[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,4,0,0,0],[0,0,0,0,0,4,4,0,0,0],[0,0,0,0,3,0,4,0,0,0],[0,0,0,2,3,0,0,0,5,5],[1,2,2,2,3,3,0,0,0,5],[1,1,1,0,0,0,0,0,0,5]] |
2 |
ํ์ด๊ณผ์ |
1.๊ท์น
- ๋ชจ๋ ๋ธ๋ก์ ๋ธ๋ก์ ๊ตฌ์ฑํ๋ ์ฌ๊ฐํ๋ค์ด ์ ํํ ๋ณด๋ ์์ ์ฌ๊ฐํ์ ๋ง๋๋ก ๋์ฌ์์ผ๋ฉฐ, ์ ์์ ๊ฑธ์น๊ฑฐ๋ ๋ณด๋๋ฅผ ๋ฒ์ด๋๊ฒ ๋์ฌ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
- ํ๋ ์ด์ด๋ ์์ชฝ์์ 1 x 1 ํฌ๊ธฐ์ ๊ฒ์ ๋ธ๋ก์ ๋จ์ด๋จ๋ ค ์์ ์ ์๋ค.
- board๋ ๋ธ๋ก์ ์ํ๊ฐ ๋ค์ด์๋ N x N ํฌ๊ธฐ 2์ฐจ์ ๋ฐฐ์ด์ด๋ค.
- 0 ์ ๋น ์นธ์ ๋ํ๋ธ๋ค.
- ๋ชจ์์ ๊ด๊ณ ์์ด ์๋ก ๋ค๋ฅธ ๋ธ๋ก์ ์๋ก ๋ค๋ฅธ ์ซ์๋ก ํํ๋๋ค.
2.์์
(1)์ง์ฌ๊ฐํ ์ฒดํฌ

3์ข ๋ฅ์ ๋ธ๋ก์ผ๋ก ๋ง๋ค ์ ์๋ ์ง์ฌ๊ฐํ์ 3X2, 2X3 ๋ฟ์ด๋ฏ๋ก (0,0) ์์น๋ถํฐ ๋ ์ง์ฌ๊ฐํ์ ๋ง๋ค ์ ์๋์ง ์ฒดํฌํฉ๋๋ค.


์ด๋, ๋น์นธ์ด 3๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ๋๋ ์ง์ฌ๊ฐํ ์์ ๋ค๋ฅธ ๋ฒํธ์ ๋ธ๋ก์ด ๋ค์ด์ค๋ ๊ฒฝ์ฐ๋ ๊นจ์ง ์ ์๋ ๋ธ๋ก์ด๋ฏ๋ก ์ ์ํฉ๋๋ค.
(2)๋ธ๋ก์ ์์์ ๋จ์ด์ง

๋ธ๋ก์ ๋งจ ์์์ ๋จ์ด์ ธ ๋ธ๋ก์์ ์์ฌ์ผ ํ๋ฏ๋ก (0,j)๋ถํฐ (i-1,j)๊น์ง ๋ธ๋ก์ด ์๋์ง ์๋์ง ์ฒดํฌํฉ๋๋ค.
(3)NxN ์์ญ ์์์๋ง ๊ฒ์ฌ

์ง์ฌ๊ฐํ ๊ฒ์ฌ๋ NxN ์์์๋ง ์ฒดํฌํด์ผ ํจ์ ์ ์ํฉ๋๋ค.
3.์ฝ๋
#include <vector> | |
using namespace std; | |
int N; | |
vector<vector<int>> Board; | |
//๋ธ๋ก ๋จ์ดํธ๋ฆด์ ์๋๊ฐ? | |
bool canFill(int row, int col) | |
{ | |
for (int i = 0; i < row; i++) | |
if (Board[i][col] != 0) return false; | |
return true; | |
} | |
//์ง์ธ์ ์๋ ๋ธ๋ก์ ์ฐพ๋๋ค | |
bool find(int row, int col, int h, int w) | |
{ | |
int emptyCnt = 0; | |
int lastValue = -1; | |
for (int i = row; i < row + h; i++) | |
{ | |
for (int j = col; j < col + w; j++) | |
{ | |
if (Board[i][j] == 0){ | |
if (!canFill(i, j)) return false; | |
if (++emptyCnt > 2) return false; | |
} | |
else{ | |
//์ง์ฌ๊ฐํ์์ ๋ค๋ฅธ๋ฒํธ์ ๋ธ๋ก์ด ๋ค์ด๊ฐ ๊ฒฝ์ฐ | |
if (lastValue != -1 && lastValue != Board[i][j]) return false; | |
lastValue = Board[i][j]; | |
} | |
} | |
} | |
//์์ญ ์ง์ฐ๊ธฐ | |
for (int i = row; i < row + h; i++) | |
for (int j = col; j < col + w; j++) | |
Board[i][j] = 0; | |
return true; | |
} | |
int solution(vector<vector<int>> board) { | |
Board = board; | |
N = board.size(); | |
int answer = 0, cnt; | |
do { | |
cnt = 0; | |
for (int i = 0; i < N; i++) | |
{ | |
for (int j = 0; j < N; j++) | |
{ | |
if (i <= N - 3 && j <= N - 2 && find(i, j, 3, 2)) cnt++;//3X2์ง์ฌ๊ฐํ | |
else if (i <= N - 2 && j <= N - 3 && find(i, j, 2, 3)) cnt++;//2X3์ง์ฌ๊ฐํ | |
} | |
} | |
answer += cnt; | |
} while (cnt); | |
return answer; | |
} |