๋ฌธ์ ๐ฆ ํต์ฌ ํค์๋
- N*N ํฌ๊ธฐ์ ๋ณด๋๊ฐ ์ฃผ์ด์ง (2 <= N <= 100)
- ๋ฑ์ ๋งค ์ด๋ง๋ค ๋ค์ ๊ท์น์ผ๋ก ์ด๋
- ์ด๋ ๊ฒฝ๋ก๊ฐ ์ฃผ์ด์ง ๋ ๋ช ์ด์ ๋๋๋๊ฐ?
- ์ฌ๊ณผ์ ๊ฐ์ K (0 <= K <= 100)
- ๋ฐฉํฅ ๋ณํ ์ ๋ณด L (1 <= L <= 100)
๐ก์์ด๋์ด
์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ ์ ๋ค๋ฅธ ๋ฌธ์ ์ ํฐ๋๋ ๊ฐ์ ํด์ค์์ ๋ณด๋๋ฅผ ๋๋ฆฌ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํธ๋ ํด์ค์ ๋ณด์๋ค. ๊ทธ ์ํฅ์ผ๋ก ์ฒ์์ ์ด ๋ฌธ์ ๋ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ ์ด๋ฉด ๋ณด๋๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก 90๋ ๋๋ฆฌ๊ณ ์ผ์ชฝ์ผ๋ก ํ์ ์ด๋ฉด ๋ณด๋๋ฅผ ์ผ์ชฝ์ผ๋ก 90๋ ๋๋ฆฌ๋ ๋ก์ง์ ์๊ฐํ๋ค. ๊ทธ๋์ ์ด ๋ก์ง์ ๋ํ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ณ์ฐํด๋ณด์๋ค.
- ์ต๋ 100๋ฒ์ ๋ฐฉํฅ ๋ณํ ํ์
- ๋ณด๋๋ฅผ ๋๋ฆฌ๊ธฐ ์ํ ๋ก์ง 100*100
- ์๊ฐ์ ์ต๋๊ฐ์ ์ ์ด๋ 10000
๊ทธ๋ผ ์ด 10000 * 100 * 10000 = 10000000000์ผ๋ก ์ฝ 100์ต์ด๋ค. ์ด ๋ฐฉ๋ฒ์ ์๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ ๋ ๋ฒ์งธ๋ก ์๊ฐํด๋ธ๊ฒ ๊ทธ๋ฅ dx, dy ๋ฐฐ์ด์ ์ด์ฉํด์ index ๊ฐ์ ๋๊ณ ์ข๋ก ์ ํ ์ -1, ์ฐ๋ก ์ด๋ ์ +1์ ํ๋๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ผ ๋ณด๋๋ฅผ ๋๋ฆฌ๋ ๋ก์ง ์์ฒด๊ฐ ์์ด์ง๋ฏ๋ก ์์ ์๊ฐ ๋ณต์ก๋์์ 100 * 10000 = 1000000์ผ๋ก ์๋นํ ์ค์ด๋๋ ๊ฒ์ ์ ์ ์๋ค.
์ด๋ป๊ฒ ์์ง์ผ์ง๋ ๋์ถฉ ์ ํ์ผ๋ ๋ฌธ์ ์ ๊ท์น์์ ์์ง์๋๋ฐ ์ฌ๊ณผ๋ฅผ ๋จน์ง ๋ชปํ์ ๋ ๊ผฌ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ง์์ค์ง ์๊ฐํ๋ค. ์ด๊ฑด ๋น๊ต์ ๊ฐ๋จํ๊ฒ ๋ ์ฌ๋ฆด ์ ์์๋๋ฐ ArrayDeque๋ฅผ ํ์ฉํด ์ง๋๊ฐ๋ ์ขํ๊ฐ์ ๋ด์๊ฐ๋ฉด์ 0์ ๋ง๋๋ ์๊ฐ ์ฒ์ ๋ด์ ์ขํ์ ๊ฐ๋ถํฐ ์ด๋๋ง๋ค ํ๋์ฉ 0์ผ๋ก ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ ๊ฒ์ด์๋ค.
์ด ํต์ฌ ๋ ๊ฐ์ง๋ง ์ ํ์ ํ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ ๋ฌธ์ ์๋๋ฐ ์ฒ์ ์๊ฐํด๋ธ ๋ฐฉ๋ฒ์ ์๊ฐ ๋ณต์ก๋ ๊ณ ๋ คํ์ง ์๊ณ ๊ตฌํํด๋ณด๋ ค๋ค 2์๊ฐ์ ํ์ฉ ๋๊ฒจ๋ฒ๋ ธ๋ค.
์ฝ๋
public class N_BOJ_3190 {
static int[] dy = {0, 1, 0, -1};
static int[] dx = {1, 0, -1, 0};
static int[][] map;
static char[] time;
static int N, K, L;
static ArrayDeque<Integer> q = new ArrayDeque<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
K = Integer.parseInt(br.readLine());
map = new int[N][N];
for (int i = 0; i < K; i++) {
st = new StringTokenizer(br.readLine());
int y = Integer.parseInt(st.nextToken());
int x = Integer.parseInt(st.nextToken());
map[y-1][x-1] = 1;
}
L = Integer.parseInt(br.readLine());
time = new char[10001];
for (int i = 0; i < L; i++) {
st = new StringTokenizer(br.readLine());
int t = Integer.parseInt(st.nextToken());
char c = st.nextToken().charAt(0);
time[t] = c;
}
int d = 0;
int y = 0, x = 0;
map[0][0] = 2;
q.add(0);
q.add(0);
for (int t = 0; t < 10001; t++) {
if (time[t] == 'D')
d = (d + 1) % 4;
else if (time[t] == 'L')
d = (d - 1) < 0 ? 3 : d-1;
int ny = y + dy[d];
int nx = x + dx[d];
if (ny < 0 || nx < 0 || ny >= N || nx >= N ||
map[ny][nx] == 2) {
System.out.println(t + 1);
return;
}
if (map[ny][nx] == 0) {
int yy = q.poll();
int xx = q.poll();
map[yy][xx] = 0;
}
map[ny][nx] = 2;
q.add(ny);
q.add(nx);
y = ny;
x = nx;
}
}
}
์ด๋ ๊ฒ ํ๊ณ ๋์ ํฐ๋๋ ๊ฐ์ ํด์ค์ ๋ดค๋๋ฐ ์๊ฐ ๊ธฐ์ค์ ๋ฐ๋ผ ๋ฐฉํฅ ์ ํ์ ์ฝ๋์ ๋จผ์ ๋ ์๋ ์๊ณ ๋์ค์ ๋ ์๋ ์์๋ค. ์ฌ์ค ์ด๊ฒ ์ดํด๊ฐ ์๊ฐ์ ์ข ํ๋ค์๋ค. ์๋ฅผ ๋ค์ด 8์ด์ ์ผ์ชฝ์ผ๋ก ๋ฐฉํฅ ์ ํํ๋ ์กฐ๊ฑด์ด ์๋ค๋ฉด, ํฐ๋๋ ์ฝ๋๋ 8์ด์ 7์ด์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ 8์ด์ ์์น๋ก ์ด๋ํ๊ธฐ ๋๋ฌธ์ ์ด๋ ์ดํ์ ๋ฐฉํฅ ์ ํ์ ํด์ฃผ๋ ๊ฒ์ด๊ณ ๋ฐ๋ฉด์ ๋ด๊ฐ ์์ฑํ ์ฝ๋๋ 8์ด์์ 9์ด์ ์ด๋ ์ขํ๋ฅผ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ ๋ฐฉํฅ์ ํ์ ๋จผ์ ํด์คฌ์ด์ผ ํ๋ ๊ฒ์ด๋ค!!
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
17143 - ๋์์ (0) | 2024.08.24 |
---|---|
17406 - ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 4 [์ฑ๊ณต(๋ฐ๋กํํธ)|01:06:16] (1) | 2024.08.17 |
๋ฐฑ์ค 12094 - 2048 (Hard) [ํ์ด์ฌ] (0) | 2022.11.22 |
๋ฐฑ์ค 12100 - 2048 (Easy) [ํ์ด์ฌ] (0) | 2022.11.20 |
๋ฐฑ์ค 1541 - ์์ด๋ฒ๋ฆฐ ์ํธ [์๋ฐ] (0) | 2022.10.31 |