โจ ๊ตฌํ โ 'ํ' ์ด์ฉํ๊ธฐ
https://www.acmicpc.net/problem/3190
3190๋ฒ: ๋ฑ
'Dummy' ๋ผ๋ ๋์ค๊ฒ์์ด ์๋ค. ์ด ๊ฒ์์๋ ๋ฑ์ด ๋์์ ๊ธฐ์ด๋ค๋๋๋ฐ, ์ฌ๊ณผ๋ฅผ ๋จน์ผ๋ฉด ๋ฑ ๊ธธ์ด๊ฐ ๋์ด๋๋ค. ๋ฑ์ด ์ด๋ฆฌ์ ๋ฆฌ ๊ธฐ์ด๋ค๋๋ค๊ฐ ๋ฒฝ ๋๋ ์๊ธฐ์์ ์ ๋ชธ๊ณผ ๋ถ๋ชํ๋ฉด ๊ฒ์์ด ๋๋๋ค. ๊ฒ์
www.acmicpc.net
๐ ๊ณ ๋ คํด์ผํ ์
- ์๋ฃ๊ตฌ์กฐ 'ํ'์ ํน์ฑ์ ์ด์ฉํด์ ํ๊ธฐ
- ๋ฑ์ ๋จธ๋ฆฌ๋ฅผ ๋จผ์ ์ด๋์์ผ ๋ชธ๊ธธ์ด ๋๋ฆฌ๊ธฐ
- ํด๋นํ๋ ์นธ์ ์ฌ๊ณผ๊ฐ ์์ผ๋ฉด ์ฌ๊ณผ๋ฅผ ๋จน๊ณ ์ฌ๊ณผ๋ฅผ ์์ ์ฃผ๊ธฐ
- ๋ฑ์ ๊ผฌ๋ฆฌ๊ฐ ์๋ ๋ชธํต์ ๋ง๋๋ฉด ๋๋ด๊ธฐ โ return !!
- ๋ฒฝ์ ๋ฟ์ผ๋ฉด ๋๋ด๊ธฐ โ return !!
- ๋ฑ์ (1, 1)์ ์กด์ฌ
- ํ, ์ด ์ ๊ตฌ๋ถํ๊ธฐ !
- ๋ฐฉํฅ ๋ฐ๊ฟ ๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ ์๊ฐํด๋ณด๊ธฐ
๐น๏ธ ํ์ด๊ณผ์
1๏ธโฃ ํ, ์ด์ ๋ํ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด์ ์ฌ๊ณผ๊ฐ ์๋ ๊ณณ์ 1๋ก ๋๋ค.
2๏ธโฃ ๋ฐฉํฅ ๋ณํ์ ๋ํ ์ ๋ณด๋ฅผ Queue์ ์ ์ฅํ๋ค.
๐ก ๋ฐฉํฅ๋ณํ ์ ๋ณด๋ intํ์ธ ์๊ฐ๊ณผ charํ์ธ ๋ฐฉํฅ์ด ํฌํจ๋์ด์ผ ํ๋ฏ๋ก ์ ๋ค๋ฆญ ํ์ ์ Info๋ก ์ค์ ํ๋ค.
3๏ธโฃ game() ๋ ๋ฑ์ ์ด๋์ํค๋ ํจ์์ด๋ฉฐ ์ด๋ํ ์ขํ๋ฅผ Deque์ ์ ์ฅํ๋ค.
๐ก ๋ฑ์ ๊ผฌ๋ฆฌ์ ๋จธ๋ฆฌ๋ฅผ ์ด๋์์ผ์ผ ํ๊ธฐ ๋๋ฌธ์ ์, ๋ค๋ก ์์๋ค์ ์ถ๊ฐ ๋ฐ ์ญ์ ๋ฅผ ํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ธ Deque์ ์ฌ์ฉํ๋ค.
4๏ธโฃ Deque์ ํ์ฌ ์์น (1, 1)๋ฅผ ์ ์ฅํ๊ณ , ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ ๋ฐ๋ผ๋ณด๊ณ ์๊ธฐ ๋๋ฌธ์ ํ์ฌ ๋ฐฉํฅ์ '๋'์ชฝ์ผ๋ก ๋๋ค. (nowDir = 1)
๐ก ๋ถ, ๋, ๋จ, ์๋ฅผ 0, 1, 2, 3์ผ๋ก ์๊ฐํ๊ณ ํ๊ธฐ โ BOJ_14503_๋ก๋ด์ฒญ์๊ธฐ ์ฐธ๊ณ
5๏ธโฃ ๊ฐ์ฅ ์ต๊ทผ์ ์ฝ์ ๋ ๊ฒ (= ๋ฑ์ ๋จธ๋ฆฌ ๋ถ๋ถ)์ ๊ธฐ์ค์ผ๋ก ํ์ฌ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๋ฐฉํฅ์ ๋ํด ๋จธ๋ฆฌ๋ฅผ ์ด๋์์ผ ๋ชธ๊ธธ์ด๋ฅผ ๋๋ฆฌ๊ณ ์๊ฐ๋ ์ฆ๊ฐ์ํจ๋ค.
6๏ธโฃ ๋ฒฝ์ ๋ฟ๊ฑฐ๋ ๋ฑ ๋ณธ์ธ์ ๋ชธ์ ๋ฟ์ผ๋ฉด ๊ฒ์์ด ๋๋๋ฏ๋ก ์ด๋๋ ์์น๋ฅผ ํ์ธํ๋ค.
7๏ธโฃ ์ด๋ ๊ฐ๋ฅํ๋ค๋ฉด ์ด๋๋ ์์น์ ์ฌ๊ณผ๊ฐ ์๋์ง ํ์ธํ๋ค. ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด ์ฌ๊ณผ๋ฅผ ๋จน๊ณ ์์ ๋ฒ๋ฆฐ๋ค. (board[nx][ny]=0)
์ฌ๊ณผ๊ฐ ์๋ค๋ฉด ๊ผฌ๋ฆฌ๊ฐ ์์นํ ๋ถ๋ถ์ ์์ ์ ๋ชธ๊ธธ์ด๋ฅผ ์ ์ง์ํจ๋ค. ๊ผฌ๋ฆฌ ๋ถ๋ถ์ ๊ฐ์ฅ ๋จผ์ ์ฝ์ ๋ ๊ฒ์ด๋ฏ๋ก pollFirst()๋ฅผ ์ฌ์ฉํ๋ค.
8๏ธโฃ ๋ง์ฝ, ๊ฒ์์ ์์ํ์ง ํน์ ์๊ฐ๋งํผ ์ง๋ฌ๋ค๋ฉด ๋ฐฉํฅ์ ๋ฐ๊ฟ์ค๋ค. ๋ฐฉํฅ๋ณํ ์ ๋ณด๊ฐ ๋ ์๋ค๋ฉด ์๋ก ๊ฐฑ์ ํ๊ณ , ์๋ค๋ฉด ๊ทธ๋๋ก ๊ฐ๋ค.
โจ ๋ฐฉํฅ ๋ฐ๊ฟ ๋ ํ !!
if (timeCnt == t) { // ๋ฐฉํฅ ๋ฐ๊ฟ ์๊ฐ~~
if (d == 'D') { // ์ค๋ฅธ์ชฝ
nowDir = (nowDir+1)%4; // ๋ถโ๋โ๋จโ์ 0,1,2,3
} else { // ์ผ์ชฝ
nowDir = (nowDir+3)%4; // ๋ถโ์โ๋จโ๋ 0,3,2,1
}
if (!direction.isEmpty()) {
directInfo = direction.poll();
t = directInfo.time;
d = directInfo.dir;
}
}
๐ฉ๐ป ์ ์ฒด ์ฝ๋
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
public class BOJ_3190_๋ฑ {
static int N, K, L, timeCnt;
static int[][] board;
static Queue<DirectInfo> direction;
static int[] dx = {-1, 0, 1, 0}; // ๋ถ๋๋จ์ -> 0123
static int[] dy = {0, 1, 0, -1};
static class DirectInfo{
int time;
char dir;
public DirectInfo(int time, char dir) {
this.time = time;
this.dir = dir;
}
}
static class Info{
int x, y;
public Info(int x, int y) {
this.x = x;
this.y = y;
}
}
static void game(){
Deque<Info> deq = new LinkedList<>();
deq.add(new Info(1, 1));
int nowDir = 1; // ๋์ชฝ(์ค๋ฅธ์ชฝ) ๋ฐ๋ผ๋ณด๊ณ ์์
DirectInfo directInfo = direction.poll();
int t=directInfo.time;
char d = directInfo.dir;
while(!deq.isEmpty()){
Info info = deq.peekLast(); // ๊ฐ์ฅ ์ต๊ทผ์ ์ฝ์
๋ ๊ฒ ํ์ธ
// ๋ชธ๊ธธ์ด ๋๋ฆฌ๊ธฐ
int nx = info.x + dx[nowDir];
int ny = info.y + dy[nowDir];
timeCnt++;
// ๋ฒฝ์ ๋ฟ๊ฑฐ๋ ๋ฑ์ด ๋ณธ์ธ ๋ชธ์ ๋ฟ์ผ๋ฉด ๋ !
if (nx > 0 && ny > 0 && nx <= N && ny <= N) { // ๋ฒฝ์ ์๋ฟ๊ธด ํจ -> ๋ชธ์ ๋ฟ๋์ง ํ์ธ
for (Info element : deq) {
if (nx == element.x && ny == element.y) {
return;
}
}
}else{ // ๋ฒฝ์ ๋ฟ์ -> ๋
return;
}
// ์ฌ๊ณผ๊ฐ ์์ ๋ ๊ธธ์ด ๋์ด๋๊ธฐ && ์ฌ๊ณผ ์์ผ๋ฉด ๊ผฌ๋ฆฌ ๋ถ๋ถ ์ง์ฐ๊ธฐ
if (board[nx][ny] != 1) { // ์ฌ๊ณผ ์์ -> ๊ผฌ๋ฆฌ๊ฐ ์์นํ ๋ถ๋ถ ์์ ๊ธฐ
deq.pollFirst();
} else { // ์ฌ๊ณผ ์์ -> ์ฌ๊ณผ ๋จน์ด์ ์์ ๋ฒ๋ฆฌ๊ธฐ
board[nx][ny] = 0;
}
deq.add(new Info(nx, ny));
if (timeCnt == t) { // ๋ฐฉํฅ ๋ฐ๊ฟ ์๊ฐ~~
if (d == 'D') { // ์ค๋ฅธ์ชฝ
nowDir = (nowDir+1)%4;
} else { // ์ผ์ชฝ
nowDir = (nowDir+3)%4;
}
if (!direction.isEmpty()) {
directInfo = direction.poll();
t = directInfo.time;
d = directInfo.dir;
}
}
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
K = Integer.parseInt(br.readLine());
board = new int[N+1][N+1];
for (int i = 0; i < K; i++) {
st = new StringTokenizer(br.readLine());
int row = Integer.parseInt(st.nextToken()); // ํ
int col = Integer.parseInt(st.nextToken()); // ์ด
board[row][col] = 1; // ์ฌ๊ณผ๊ฐ ์๋ ๊ณณ
}
direction = new LinkedList<>();
L = Integer.parseInt(br.readLine());
for (int i = 0; i < L; i++) {
st = new StringTokenizer(br.readLine());
int t = Integer.parseInt(st.nextToken());
char d = st.nextToken().charAt(0);
direction.add(new DirectInfo(t, d)); // ๋ฐฉํฅ๋ณํ์ ๋ํ ์ ๋ณด ์ ์ฅ
}
game();
bw.write(timeCnt + " ");
bw.flush();
bw.close();
}
}
๐ง ํค๋งธ๋ ๋ถ๋ถ
- ๋ฒฝ์ ๋ฟ๊ฑฐ๋ ๋ชธํต์ ๋ฟ์์ ๋ ๊ฒ์์ ๋๋ด๊ธฐ ์ํด์๋
break
๊ฐ ์๋return
์ ์ฌ์ฉํด์ผ ํ๋ค. ๐ ์ด๊ฑธ๋ก 1์๊ฐ ์ด์์ ์ก์๋จน์๋ค.. - ์ฌ๊ณผ๋ฅผ ๋จน์์ผ๋ฉด ์์ ๊ธฐ ์ํด์ 1์ 0์ผ๋ก ๋ฐ๊ฟ์ผ ํ๋ค.
'์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 4179 ๋ถ! - Java (1) | 2023.10.25 |
---|---|
[BOJ] 14502 ์ฐ๊ตฌ์ - Java (0) | 2023.09.28 |
[BOJ] 11657 ํ์๋จธ์ (1) | 2023.09.08 |
[BOJ] 1865 ์ํ (0) | 2023.09.08 |
[BOJ] 1939 ์ค๋์ ํ (0) | 2023.09.07 |