๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

3190 - ๋ฑ€ [์„ฑ๊ณต(๋ฐ˜๋ก€ํžŒํŠธ)|02:14:43]

๋ฌธ์ œ๐Ÿฆ– ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ

 

  1. N*N ํฌ๊ธฐ์˜ ๋ณด๋“œ๊ฐ€ ์ฃผ์–ด์ง (2 <= N <= 100)
  2. ๋ฑ€์€ ๋งค ์ดˆ๋งˆ๋‹ค ๋‹ค์Œ ๊ทœ์น™์œผ๋กœ ์ด๋™
  3. ์ด๋™ ๊ฒฝ๋กœ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๋ช‡ ์ดˆ์— ๋๋‚˜๋Š”๊ฐ€?
  4. ์‚ฌ๊ณผ์˜ ๊ฐœ์ˆ˜ K (0 <= K <= 100)
  5. ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ์ •๋ณด L (1 <= L <= 100)

 

 

๐Ÿ’ก์•„์ด๋””์–ด

 

์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์ „์— ๋‹ค๋ฅธ ๋ฌธ์ œ์˜ ํฐ๋Œ๋‹˜ ๊ฐ•์˜ ํ•ด์„ค์—์„œ ๋ณด๋“œ๋ฅผ ๋Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ํ•ด์„ค์„ ๋ณด์•˜๋‹ค. ๊ทธ ์˜ํ–ฅ์œผ๋กœ ์ฒ˜์Œ์— ์ด ๋ฌธ์ œ๋„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „์ด๋ฉด ๋ณด๋“œ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 90๋„ ๋Œ๋ฆฌ๊ณ  ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „์ด๋ฉด ๋ณด๋“œ๋ฅผ ์™ผ์ชฝ์œผ๋กœ 90๋„ ๋Œ๋ฆฌ๋Š” ๋กœ์ง์„ ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋กœ์ง์— ๋Œ€ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด์•˜๋‹ค.

  1. ์ตœ๋Œ€ 100๋ฒˆ์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ํšŸ์ˆ˜
  2. ๋ณด๋“œ๋ฅผ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ๋กœ์ง 100*100
  3. ์‹œ๊ฐ„์˜ ์ตœ๋Œ“๊ฐ’์€ ์ ์–ด๋„ 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์ดˆ์˜ ์ด๋™ ์ขŒํ‘œ๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ๋ฐฉํ–ฅ์ „ํ™˜์„ ๋จผ์ € ํ•ด์คฌ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค!!