https://www.acmicpc.net/problem/14503
๋ฌธ์
๋ก๋ด ์ฒญ์๊ธฐ์ ๋ฐฉ์ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฒญ์ํ๋ ์์ญ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
(์ค๋ต)
- ํ์ฌ ์นธ์ด ์์ง ์ฒญ์๋์ง ์์ ๊ฒฝ์ฐ, ํ์ฌ ์นธ์ ์ฒญ์ํ๋ค.
- ํ์ฌ ์นธ์ ์ฃผ๋ณ 4์นธ ์ค ์ฒญ์๋์ง ์์ ๋น ์นธ์ด ์๋ ๊ฒฝ์ฐ,
- ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ์ ์งํ ์ฑ๋ก ํ ์นธ ํ์งํ ์ ์๋ค๋ฉด ํ ์นธ ํ์งํ๊ณ 1๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
- ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ๋ค์ชฝ ์นธ์ด ๋ฒฝ์ด๋ผ ํ์งํ ์ ์๋ค๋ฉด ์๋์ ๋ฉ์ถ๋ค.
- ํ์ฌ ์นธ์ ์ฃผ๋ณ 4์นธ ์ค ์ฒญ์๋์ง ์์ ๋น ์นธ์ด ์๋ ๊ฒฝ์ฐ,
- ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก 90๋ ํ์ ํ๋ค.
- ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์์ชฝ ์นธ์ด ์ฒญ์๋์ง ์์ ๋น ์นธ์ธ ๊ฒฝ์ฐ ํ ์นธ ์ ์งํ๋ค.
- 1๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
์ถ๋ ฅ
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์๋์ ์์ํ ํ ์๋์ ๋ฉ์ถ ๋๊น์ง ์ฒญ์ํ๋ ์นธ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
๋ฌธ์ ์ ๋์์๋๋๋ก ์์ฐจ์ ์ผ๋ก ๊ตฌํํ๋ ๊ตฌํ ๋ฌธ์ ๋ค.
์ฐ์ ์ ๋ ฅ๊ฐ์ ๋ฐ์์ ๋ฒกํฐ์ ์ ์ฅํด์ค ๋ค, ๋ก๋ด์ฒญ์๊ธฐ์ ๊ฒฝ๋ก๋ฅผ ์๋ฎฌ๋ ์ด์ ํ์
1: ๋ฒฝ
0: ๋น๊ณต๊ฐ(์ฒญ์์ํจ)
2: ๋น๊ณต๊ฐ(์ฒญ์ํจ)
1๋ฒ ์กฐ๊ฑด > ํ์ฌ ์นธ์ด ์์ง ์ฒญ์๋์ง ์์ ๊ฒฝ์ฐ, ํ์ฌ ์นธ์ ์ฒญ์ํ๋ค.
ํ์ฌ ์์น v[r][c]์ ์ฒญ์ํ๋ค๋ ์๋ฏธ๋ก 2๋ก ๊ฐ์ ๋ณ๊ฒฝํ๋ค.
1(๋ฒฝ์ผ)๋ก ํ์ํ์ง ์๊ฒ ์ฃผ์ํ์. ์ฒญ์ํ ๊ณต๊ฐ์ ๋ฒฝ๊ณผ ๋ฌ๋ฆฌ ํ์ง(3๋ฒ ์กฐ๊ฑด)ํ ๋ ์ง๋๊ฐ ์ ์๋ค
if(v[r][c]==0) {
ans++;
v[r][c] = 2;
}
3๋ฒ ์กฐ๊ฑด > ํ์ฌ ์นธ์ ์ฃผ๋ณ 4์นธ ์ค ์ฒญ์๋์ง ์์ ๋น ์นธ์ด ์๋ ๊ฒฝ์ฐ,
for๋ฌธ์ ๋๋ ค์ ๋ค ๋ฐฉํฅ์ ํ์ํ๋ค.
"๋ฐ์๊ณ" ๋ฐฉํฅ์ ์ ์ํ์. ๋ฌธ์ ์์ ์ฃผ์ด์ง d๋ ๋ถ ์ ๋จ ๋ ์ด์ง๋ง
๋ฐ์๊ณ ๋ฐฉํฅ์ ๋ถ ๋ ์ ๋จ ์ด๋ค. ์ฆ d๋ฅผ ๊ฐ์์์ผ์ผํ๋ค
๊ทธ๋ ๊ฒ ๋๋ฆฐ ๋ฐฉํฅ์ ์ขํ v[nx][ny] ๊ฐ ์ฒญ์ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ๋ค
์ฒญ์๊ฐ ๋์ด์๋ค๋ฉด(๊ฐ์ด 0) ์ด๋์ํจ๋ค. r=nx, c=ny, d=nd
๊ทธ๋ฆฌ๊ณ 1๋ฒ์ผ๋ก ๋์๊ฐ๋ค. -> ๋ฐฉํฅ ํ์์ฉ for๋ฌธ break
bool isMoved = false;
for(int i=0; i<4; i++) {
// 3-1. ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก 90๋ ํ์
int nd = (d-i+3)%4;
int nx = r+dx[nd];
int ny = c+dy[nd];
// 3-2. ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์์ชฝ ์นธ์ด ์ฒญ์๋์ง ์์ ๋น ์นธ์ธ ๊ฒฝ์ฐ ํ ์นธ ์ ์งํ๋ค.
if(v[nx][ny] == 0) {
r = nx;
c = ny;
d = nd;
isMoved = true;
break; // 3-3. 1๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
}
3๋ฒ ์กฐ๊ฑด > ํ์ฌ ์นธ์ ์ฃผ๋ณ 4์นธ ์ค ์ฒญ์๋์ง ์์ ๋น ์นธ์ด ์๋ ๊ฒฝ์ฐ,
์๋ ์ฝ๋์ ์ง์ ํ๋ ๊ฒฝ์ฐ๋ ๋๊ฐ์ง๋ค
1) ์ฒญ์๋์ง ์์ ์นธ์ ๋ฐ๊ฒฌํด์ ํ ์นธ ์ ์งํ๊ณ break๋ก ๋๋ฌ. isMoved = true;
2) ์ฒญ์๋์ง ์์ ์นธ์ด ์ฃผ๋ณ์ ์์ด์ for๋ฌธ์ ๋ค ๋๊ณ ๋๋ฌ. isMoved = false;
๋๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ๊ตฌ๋ถํด์ฃผ๊ธฐ ์ํด 2๋ฒ ๊ฒฝ์ฐ์๋ง ์๋ ์ฝ๋๊ฐ ์คํ๋๋ค (1๋ฒ ๊ฒฝ์ฐ๋ ์คํ๋์ง ์๊ณ ๋ฐ๋ก 1๋จ๊ณ๋ก ๋์๊ฐ๋ค #while)
ํ์ฌ ๋ฐฉํฅ d๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค๋ก ๊ฐ๋ ๋ฐฉํฅ(back = (d+2)%4;)์ผ๋ก ์ด๋ํ๋ค(r += dx[back]; c += dy[back];)
ํ์งํ ์์น๊ฐ ๋ฒฝ์ด๋ฉด ์๋์ ๋ฉ์ถ๋ค. -> while๋ฌธ break
๋ฒฝ์ด ์๋๋ผ๋ฉด ์ ํ์งํ๊ฑฐ๋ ์ค๋ฌด์คํ๊ฒ while ๋ฐ๋ผ 1๋จ๊ณ๋ก ๋์๊ฐ๋ค
if(!isMoved) {
// 3-1. ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ์ ์งํ ์ฑ๋ก ํ ์นธ ํ์งํ ์ ์๋ค๋ฉด ํ ์นธ ํ์งํ๊ณ 1๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
int back = (d+2)%4;
r += dx[back];
c += dy[back];
// 3-2. ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ๋ค์ชฝ ์นธ์ด ๋ฒฝ์ด๋ผ ํ์งํ ์ ์๋ค๋ฉด ์๋์ ๋ฉ์ถ๋ค.
if(v[r][c] == 1) break;
}
์ฝ๋
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
using namespace std;
// ๋ถ, ์, ๋จ, ๋
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
int main() {
// ์
๋ ฅ
int n,m, r,c,d;
cin >> n >> m >> r >> c >> d;
vector<vector<int>> v(n, vector<int>(m));
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
cin >> v[i][j];
}
}
int ans=0; // ์ฒญ์ ์นด์ดํธ
while(true) {
// 1. ํ์ฌ ์นธ์ด ์์ง ์ฒญ์๋์ง ์์ ๊ฒฝ์ฐ, ํ์ฌ ์นธ์ ์ฒญ์ํ๋ค.
if(v[r][c]==0) {
ans++;
v[r][c] = 2;
}
// 3. ํ์ฌ ์นธ์ ์ฃผ๋ณ 4์นธ ์ค ์ฒญ์๋์ง ์์ ๋น ์นธ์ด ์๋ ๊ฒฝ์ฐ
bool isMoved = false;
for(int i=0; i<4; i++) {
// 3-1. ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก 90๋ ํ์
int nd = (d-i+3)%4;
int nx = r+dx[nd];
int ny = c+dy[nd];
// 3-2. ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์์ชฝ ์นธ์ด ์ฒญ์๋์ง ์์ ๋น ์นธ์ธ ๊ฒฝ์ฐ ํ ์นธ ์ ์งํ๋ค.
if(v[nx][ny] == 0) {
r = nx;
c = ny;
d = nd;
isMoved = true;
break; // 3-3. 1๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
}
}
// 2. ํ์ฌ ์นธ์ ์ฃผ๋ณ 4์นธ ์ค ์ฒญ์๋์ง ์์ ๋น ์นธ์ด ์๋ ๊ฒฝ์ฐ
if(!isMoved) {
// 3-1. ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ์ ์งํ ์ฑ๋ก ํ ์นธ ํ์งํ ์ ์๋ค๋ฉด ํ ์นธ ํ์งํ๊ณ 1๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
int back = (d+2)%4;
r += dx[back];
c += dy[back];
// 3-2. ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ๋ค์ชฝ ์นธ์ด ๋ฒฝ์ด๋ผ ํ์งํ ์ ์๋ค๋ฉด ์๋์ ๋ฉ์ถ๋ค.
if(v[r][c] == 1) break;
}
}
cout << ans;
}
์์ ๊ฐ ํ๋ ธ๋์?
์์ 2์ ๋ต์ด 57์ด ์๋ 52๋ก ๋์๋ค๋ฉด
๋ก๋ด์ 4๋ฐฉํฅ ์ค ํ ๊ณณ์ด๋ผ๋ ์ฒญ์ํ ์ ์๋ ๊ณณ์ด ์๋ ๊ฒฝ์ฐ ๋ฌด.์กฐ.๊ฑด ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก 90๋ ํ์ ์ด ๋จผ์ ์ด๋ฃจ์ด์ ธ์ผ ํจ.
์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธํ์.
์ง์งํ ์ ์์ผ๋ฉด ์ง์งํ๋๊ฒ ์๋๋ค !!!
์๋ฅผ๋ค์ด ์๋์ ๊ฐ์ ์์๋ก ๊ฐ๋ค๋ฉด (์ํ๋ฒณ ์์๋๋ก ์ฒญ์ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋จ)
๋ก๋ด์ด ์ง์ง์ด ๊ฐ๋ฅํ๋ฉด ์ง์ง ๋จผ์ ๋๋ ๊ฒฝ์ฐ๋ก ์๋ชป ๋ ๊ฒฝ์ฐ๋ค
1 1 1 1 1 1 1 1 1 1
1 r q p o n m l k 1
1 s 0 0 1 1 1 1 j 1
1 t 0 1 1 0 0 0 i 1
1 u 1 1 d e f g h 1
1 v ๏ฟฝ ๏ฟฝ c ๏ฟฝ ๏ฟฝ ๏ฟฝ ๏ฟฝ 1
1 w ๏ฟฝ ๏ฟฝ b ๏ฟฝ 0 1 ๏ฟฝ 1
1 x ๏ฟฝ ๏ฟฝ a ๏ฟฝ 1 1 ๏ฟฝ 1
1 y ๏ฟฝ ๏ฟฝ ๏ฟฝ ๏ฟฝ 1 1 ๏ฟฝ 1
1 z a b c d e ๏ฟฝ ๏ฟฝ 1
1 1 1 1 1 1 1 1 1 1
์ ๋๋ก ๋ ๊ฒฝ์ฐ๋ ์๋ ์์๋ก ๊ฐ์ผํ๋ค
1 1 1 1 1 1 1 1 1 1
1 ๏ฟฝ ๏ฟฝ ๏ฟฝ ๏ฟฝ ๏ฟฝ ๏ฟฝ ๏ฟฝ ๏ฟฝ 1
1 ๏ฟฝ ๏ฟฝ ๏ฟฝ 1 1 1 1 ๏ฟฝ 1
1 ๏ฟฝ ๏ฟฝ 1 1 ๏ฟฝ ๏ฟฝ ๏ฟฝ ๏ฟฝ 1
1 ๏ฟฝ 1 1 ๏ฟฝ ๏ฟฝ f e 0 1
1 ๏ฟฝ ๏ฟฝ l k ๏ฟฝ ๏ฟฝ d c 1
1 ๏ฟฝ n m j i 0 1 b 1
1 p o b a h 1 1 z 1
1 q r c d g 1 1 y 1
1 u s t e f v w x 1
1 1 1 1 1 1 1 1 1 1
'๐ BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 1037๋ฒ: ์ฝ์ (0) | 2024.03.08 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 2849๋ฒ: ํ์ด์ ๋ฐํด (0) | 2024.03.06 |
[BOJ][C++] ๋ฐฑ์ค 2839๋ฒ: ์คํ ๋ฐฐ๋ฌ (0) | 2023.11.02 |
[BOJ][C++] ๋ฐฑ์ค 1296๋ฒ: ๋์นญ ์ฐจ์งํฉ (0) | 2023.10.16 |
[BOJ][C++] ๋ฐฑ์ค 1002๋ฒ: ํฐ๋ (0) | 2023.10.12 |