[C++] BOJ 14499 - ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐProblem Solving/Baekjoon Online Judge (BOJ)2025. 4. 15. 14:42
Table of Contents

01. ๐ ๋ฌธ์ ํ์
N: ์ง๋์ ์ธ๋ก ๊ธธ์ด
M: ์ง๋์ ๊ฐ๋ก ๊ธธ์ด
x, y: ํ์ฌ ์ฃผ์ฌ์์ ์์น
K: ๋ช
๋ น ๊ฐ์
- ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ธ์ ๋, ์ง๋ ์นธ์ ์ซ์๊ฐ 0์ด๋ฉด ์ฃผ์ฌ์ ๋ฐ๋ฅ๋ฉด ์ซ์๋ฅผ ํด๋น ์นธ์ ๋ณต์ฌ (์ฃผ์ฌ์ -> ์นธ)
์ง๋ ์นธ์ ์ซ์๊ฐ 0์ด ์๋๋ฉด ์ฃผ์ฌ์ ๋ฐ๋ฅ๋ฉด์ ํด๋น ์นธ์ ์ซ์๋ฅผ ๋ณต์ฌํ๊ณ ์นธ์ ์ซ์๋ 0์ด ๋จ (์นธ -> ์ฃผ์ฌ์) - ์ด๋ ๋ช
๋ น์ ๋ฐ๋ผ ์ฃผ์ฌ์๊ฐ ์ด๋ํ๊ณ ์ด๋๋ง๋ค ์ฃผ์ฌ์ ์๋จ ๊ฐ์ ์ถ๋ ฅ
๋ง์ฝ, ์ฃผ์ฌ์๊ฐ ์ง๋ ๋ฐ์ผ๋ก ๋๊ฐ๋ ค๊ณ ํ๋ฉด, ๊ทธ ๋ช ๋ น์ ๋ฌด์ํ๊ณ ์ถ๋ ฅ๋ ํ์ง ์์
01-1. ๊ฐ๋ฅํ ์๊ฐ ๋ณต์ก๋
- ๋ช ๋ น์ ๋ฐ๋ผ ์ง๋ ์์์ ์ฃผ์ฌ์๋ฅผ ์์ง์ด๊ณ ์๋จ ๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๊ธฐ ๋๋ฌธ์, ์๊ฐ ๋ณต์ก๋ O(K)๋ก ๊ตฌํ๊ฐ๋ฅ
01-2. ์๊ณ ๋ฆฌ์ฆ ์ ํ
- ๋จ์ ์๋ฎฌ๋ ์ด์
๋ฌธ์
์ฃผ์ฌ์๊ฐ ์ง๋์์ ๋ฒ์ด๋์ง ์๊ฒ ์์น๋ฅผ ์ฒดํฌํ๋ฉฐ, ์ฃผ์ฌ์ ์๋จ ๊ฐ์ ์ถ๋ ฅ
02. ๐ ์ฝ๋ ์ค๊ณํ๊ธฐ
- N, M, x, y K์ ๋ํด์ ์ ๋ ฅ
- NxM ์ฌ์ด์ฆ ์ง๋์ ์นธ ๋ง๋ค ์ซ์๋ฅผ ์ ๋ ฅ
- ์ด๋ ๋ช
๋ น์ K๋ฒ ๋ฐ๋ณตํ๋ฉฐ ์
๋ ฅ
- ์ด๋ ๋ช ๋ น์ ๋ฐ๋ผ ๋ค์ ์์น๋ฅผ ์์ธกํ์ฌ ์ ํด์ง ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ฌด์
- ์ ํด์ง ๋ฒ์ ๋ด์ ์ด๋์ผ ๊ฒฝ์ฐ, ์ฃผ์ฌ์๋ฅผ ๋ช ๋ น ๋ฐฉํฅ์ผ๋ก ๊ตด๋ ค ์๋จ ๊ฐ์ ์ถ๋ ฅ
- ๋ช ๋ น์ ๋ฐ๋ผ ์์ง์ธ ์ง๋ ์์น์ ์ซ์๊ฐ 0์ด ์๋ ๊ฒฝ์ฐ, ์ฃผ์ฌ์ ๋ฐ๋ฅ๋ฉด์ ์ซ์๋ฅผ ๋ณต์ฌํ๊ณ ํด๋น ์นธ์ ์ซ์๋ฅผ 0์ผ๋ก
- ์ง๋ ์นธ์ ์ซ์๊ฐ 0์ผ ๊ฒฝ์ฐ, ์ฃผ์ฌ์ ๋ฐ๋ค๋ฉด์ ์ซ์๋ฅผ ํด๋น ์นธ์ผ๋ก ๋ณต์ฌ
03. ๐ ๏ธ ์๋๋ณ ์์
1ํ์ฐจ
04. ๐๏ธ ์ ๋ต ์ฝ๋
#include <bits/stdc++.h>
using namespace std;
int dice[6];
vector<vector<int>> board(20, vector<int>(20, -1));
void move(int d){
int tmp[6];
copy(begin(dice), end(dice), begin(tmp));
switch(d){
case 1:
dice[0] = tmp[4];
dice[4] = tmp[2];
dice[2] = tmp[5];
dice[5] = tmp[0];
break;
case 2:
dice[0] = tmp[5];
dice[5] = tmp[2];
dice[2] = tmp[4];
dice[4] = tmp[0];
break;
case 3:
dice[0] = tmp[1];
dice[1] = tmp[2];
dice[2] = tmp[3];
dice[3] = tmp[0];
break;
case 4:
dice[0] = tmp[3];
dice[3] = tmp[2];
dice[2] = tmp[1];
dice[1] = tmp[0];
break;
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int dx[5] = {0, 0, 0, -1, 1};
int dy[5] = {0, 1, -1, 0, 0};
int N, M, x, y, K;
cin >> N >> M >> x >> y >> K;
for(int i = 0; i < N; i++){
for(int j = 0; j < M; j++){
cin >> board[i][j];
}
}
for(int i = 0; i < K; i++){
int order;
cin >> order;
int nx = x + dx[order], ny = y + dy[order];
if(nx < 0 || nx >= N || ny < 0 || ny >= M) continue;
x = nx, y = ny;
move(order);
int &top = dice[0], &bottom = dice[2];
cout << top << "\n";
if(board[x][y] != 0){
bottom = board[x][y];
board[x][y] = 0;
} else board[x][y] = bottom;
}
return 0;
}
'Problem Solving > Baekjoon Online Judge (BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [C++] BOJ 17837 - ์๋ก์ด ๊ฒ์ 2 (0) | 2025.04.17 |
|---|---|
| [C++] BOJ 14890 - ๊ฒฝ์ฌ๋ก (0) | 2025.04.16 |
| [C++] BOJ 1561 - ๋์ด ๊ณต์ (1) | 2025.04.14 |
| [C++] BOJ 12015 - ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด 2 (0) | 2025.04.13 |
| [C++] BOJ 2473 - ์ธ ์ฉ์ก (0) | 2025.04.12 |
@ONE_ :: ์ ํธ์
์๋ชป๋ ์ ๋ณด๊ฐ ์๋ค๋ฉด ๋ง์ํด์ฃผ์ธ์!