05-16 05:32
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[BAEKJOON] ๋ฐฑ์ค€ ๊ทธ๋ž˜ํ”„ 3190 :: ๋ฑ€ ๋ณธ๋ฌธ

Algorithm/Baekjoon

[BAEKJOON] ๋ฐฑ์ค€ ๊ทธ๋ž˜ํ”„ 3190 :: ๋ฑ€

miinsun 2022. 7. 14. 15:33

๐Ÿ’ฌ  ๋ฌธ์ œ ์„ค๋ช…

 'Dummy' ๋ผ๋Š” ๋„์Šค๊ฒŒ์ž„์ด ์žˆ๋‹ค. ์ด ๊ฒŒ์ž„์—๋Š” ๋ฑ€์ด ๋‚˜์™€์„œ ๊ธฐ์–ด๋‹ค๋‹ˆ๋Š”๋ฐ, ์‚ฌ๊ณผ๋ฅผ ๋จน์œผ๋ฉด ๋ฑ€ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค. ๋ฑ€์ด ์ด๋ฆฌ์ €๋ฆฌ ๊ธฐ์–ด๋‹ค๋‹ˆ๋‹ค๊ฐ€ ๋ฒฝ ๋˜๋Š” ์ž๊ธฐ์ž์‹ ์˜ ๋ชธ๊ณผ ๋ถ€๋”ชํžˆ๋ฉด ๊ฒŒ์ž„์ด ๋๋‚œ๋‹ค.

๊ฒŒ์ž„์€ NxN ์ •์‚ฌ๊ฐ ๋ณด๋“œ์œ„์—์„œ ์ง„ํ–‰๋˜๊ณ , ๋ช‡๋ช‡ ์นธ์—๋Š” ์‚ฌ๊ณผ๊ฐ€ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋ณด๋“œ์˜ ์ƒํ•˜์ขŒ์šฐ ๋์— ๋ฒฝ์ด ์žˆ๋‹ค. ๊ฒŒ์ž„์ด ์‹œ์ž‘ํ• ๋•Œ ๋ฑ€์€ ๋งจ์œ„ ๋งจ์ขŒ์ธก์— ์œ„์น˜ํ•˜๊ณ  ๋ฑ€์˜ ๊ธธ์ด๋Š” 1 ์ด๋‹ค. ๋ฑ€์€ ์ฒ˜์Œ์— ์˜ค๋ฅธ์ชฝ์„ ํ–ฅํ•œ๋‹ค.

๋ฑ€์€ ๋งค ์ดˆ๋งˆ๋‹ค ์ด๋™์„ ํ•˜๋Š”๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.
* ๋จผ์ € ๋ฑ€์€ ๋ชธ๊ธธ์ด๋ฅผ ๋Š˜๋ ค ๋จธ๋ฆฌ๋ฅผ ๋‹ค์Œ์นธ์— ์œ„์น˜์‹œํ‚จ๋‹ค.
* ๋งŒ์•ฝ ์ด๋™ํ•œ ์นธ์— ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ทธ ์นธ์— ์žˆ๋˜ ์‚ฌ๊ณผ๊ฐ€ ์—†์–ด์ง€๊ณ  ๊ผฌ๋ฆฌ๋Š” ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค.
* ๋งŒ์•ฝ ์ด๋™ํ•œ ์นธ์— ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค๋ฉด, ๋ชธ๊ธธ์ด๋ฅผ ์ค„์—ฌ์„œ ๊ผฌ๋ฆฌ๊ฐ€ ์œ„์น˜ํ•œ ์นธ์„ ๋น„์›Œ์ค€๋‹ค. ์ฆ‰, ๋ชธ๊ธธ์ด๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์‚ฌ๊ณผ์˜ ์œ„์น˜์™€ ๋ฑ€์˜ ์ด๋™๊ฒฝ๋กœ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ด ๊ฒŒ์ž„์ด ๋ช‡ ์ดˆ์— ๋๋‚˜๋Š”์ง€ ๊ณ„์‚ฐํ•˜๋ผ.

 

๐Ÿ”จ  ์ž…์ถœ๋ ฅ ์˜ˆ

์ž…๋ ฅ 

  • ์ฒซ์งธ ์ค„์— ๋ณด๋“œ์˜ ํฌ๊ธฐ N์ด ์ฃผ์–ด์ง„๋‹ค. (2 ≤ N ≤ 100) ๋‹ค์Œ ์ค„์— ์‚ฌ๊ณผ์˜ ๊ฐœ์ˆ˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (0 ≤ K ≤ 100)
  • ๋‹ค์Œ K๊ฐœ์˜ ์ค„์—๋Š” ์‚ฌ๊ณผ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ฒซ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ํ–‰, ๋‘ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ์—ด ์œ„์น˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์‚ฌ๊ณผ์˜ ์œ„์น˜๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๋ฉฐ, ๋งจ ์œ„ ๋งจ ์ขŒ์ธก (1ํ–‰ 1์—ด) ์—๋Š” ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค.
  • ๋‹ค์Œ ์ค„์—๋Š” ๋ฑ€์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ํšŸ์ˆ˜ L ์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ L ≤ 100)
  • ๋‹ค์Œ L๊ฐœ์˜ ์ค„์—๋Š” ๋ฑ€์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ,  ์ •์ˆ˜ X์™€ ๋ฌธ์ž C๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ. ๊ฒŒ์ž„ ์‹œ์ž‘ ์‹œ๊ฐ„์œผ๋กœ๋ถ€ํ„ฐ X์ดˆ๊ฐ€ ๋๋‚œ ๋’ค์— ์™ผ์ชฝ(C๊ฐ€ 'L') ๋˜๋Š” ์˜ค๋ฅธ์ชฝ(C๊ฐ€ 'D')๋กœ 90๋„ ๋ฐฉํ–ฅ์„ ํšŒ์ „์‹œํ‚จ๋‹ค๋Š” ๋œป์ด๋‹ค. X๋Š” 10,000 ์ดํ•˜์˜ ์–‘์˜ ์ •์ˆ˜์ด๋ฉฐ, ๋ฐฉํ–ฅ ์ „ํ™˜ ์ •๋ณด๋Š” X๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

  • ์ฒซ์งธ ์ค„์— ๊ฒŒ์ž„์ด ๋ช‡ ์ดˆ์— ๋๋‚˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 1)

6
3
3 4
2 5
5 3
3
3 D
15 L
17 D

 

์˜ˆ์ œ ์ถœ๋ ฅ 1)

9

 

์˜ˆ์ œ ์ž…๋ ฅ 2)

10
4
1 2
1 3
1 4
1 5
4
8 D
10 D
11 D
13 L

 

์˜ˆ์ œ ์ถœ๋ ฅ 2)

21

โ€‹

์˜ˆ์ œ ์ž…๋ ฅ 3)

10
5
1 5
1 3
1 2
1 6
1 7
4
8 D
10 D
11 D
13 L

 

์˜ˆ์ œ ์ถœ๋ ฅ 3)

13

 

 

โ€‹

๐Ÿ’ป  Main.java

๋ฌธ์ œ ์ž์ฒด๋Š” ์–ด๋ ต์ง€ ์•Š์•˜์ง€๋งŒ, ์ง€์ผœ์•ผ ํ•˜๋Š” ์กฐ๊ฑด์ด ๋งŽ์•„์„œ ํ‘ธ๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค.. ๊ตฌํ˜„ ๋ฌธ์ œ๋Š” ๋„ˆ๋ฌด ์ง‘์ค‘๋ ฅ์ด ๋งŽ์ด ํ•„์š”ํ•ด ใ… 

๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด ์ƒ๊ฐ ํ•ด์•ผํ•  ์กฐ๊ฑด์ด ๋ช‡๊ฐ€์ง€ ์žˆ๋‹ค. ๋จผ์ € ์‚ฌ๊ณผ์˜ ์œ„์น˜, ๋ฐฉํ–ฅ ๋ฐ”๊พธ๊ธฐ, ๋ฑ€์˜ ์ด๋™ ๋ฐฉ๋ฒ• ๋“ฑ์„ ๊ณ ๋ คํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ดค๋‹ค

  • ๋จผ์ € ๊ฐ๊ฐ์˜ ์ •๋ณด๋ฅผ ์ž๋ฃŒํ˜•์— ๋งž๊ฒŒ ์ •๋ฆฌํ•˜์ž.
    • ๋ฑ€์˜ ์ •๋ณด๋Š” ์•ž๋’ค๋กœ ์œ ๋™์ ์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” deque
    • ์‚ฌ๊ณผ ์ •๋ณด๋Š” ArrayList๋กœ
    • ๋ฐฉํ–ฅ ์ •๋ณด๋Š” HashMap<Integer, Character>๋ฅผ ์ด์šฉํ–ˆ๋‹ค
      • ๋ฐฉํ–ฅ์€ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์œ„(1), ์˜ค๋ฅธ์ชฝ(2), ์•„๋ž˜(3), ์™ผ์ชฝ(4)๋กœ ์ง€์ •
  • ๋ฌดํ•œ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ ํƒˆ์ถœ ์กฐ๊ฑด์„ ์„ค์ •ํ•ด ๊ฒŒ์ž„์ด ๋ช‡์ดˆ์— ๋๋‚˜๋Š”์ง€ ๊ตฌํ–ˆ๋‹ค.
    • ํƒˆ์ถœ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค
      • ๋ฑ€์ด ์ž๊ธฐ ๋ชธ์— ๋ถ€๋”ชํ˜”์„ ๋•Œ
      • ๋ฑ€์ด ๋ฒฝ์— ๋ถ€๋”ชํ˜”์„ ๋•Œ

<์ „์ฒด ์ฝ”๋“œ>

import java.util.*;

class Point {
    int x;
    int y;

    Point(int x, int y){
        this.x = x;
        this.y = y;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Point point = (Point) o;
        return x == point.x && y == point.y;
    }
}

public class Main {
    static int n;
    static Deque<Point> deque;
    static ArrayList<Point> apples;
    static HashMap<Integer, Character> dirs;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // ๋ณด๋“œ์˜ ํฌ๊ธฐ
        n = sc.nextInt();

        // ๋ฑ€์„ ํ‘œํ˜„ํ•  ๋ฑ
        deque = new LinkedList<>();
        deque.add(new Point(1, 1));

        // ์‚ฌ๊ณผ์˜ ๊ฐœ์ˆ˜
        int k = sc.nextInt();
        apples = new ArrayList<>();
        for(int i = 0; i < k; i++) {
            apples.add(new Point(sc.nextInt(), sc.nextInt()));
        }

        // ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ์ •๋ณด
        int l = sc.nextInt();
        dirs = new HashMap<>();
        for(int i = 0; i < l; i++){
            dirs.put(sc.nextInt(), sc.next().charAt(0));
        }

        int dir = 2; // ์ฒ˜์Œ์—๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ง์ง„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉํ–ฅ ์ •๋ณด 2๋ฅผ ์ค€๋‹ค
        int cnt = 0;
        while(true){
            cnt++;

            if(!move(dir))
                break;

            dir = changeDir(dir, cnt);
        }

        System.out.println(cnt);
    }

    static boolean move( int dir){
        Point cur = deque.peekFirst();
        int nx = cur.x;
        int ny = cur.y;
        switch (dir){
            // ์œ„๋กœ ์ด๋™
            case 1:
                nx -= 1;
                break;
            // ์˜ค๋ฅธ์ชฝ ์ด๋™
            case 2:
                ny += 1;
                break;
            // ์•„๋ž˜๋กœ ์ด๋™
            case 3:
                nx += 1;
                break;
            // ์™ผ์ชฝ ์ด๋™
            case 4:
                ny -= 1;
                break;
        }

        Point next = new Point(nx, ny);
        // ํƒˆ์ถœ ์กฐ๊ฑด (์ž๊ธฐ ๋ชธ์— ๋ถ€๋”ชํžˆ๊ฑฐ๋‚˜, ๋ฒฝ์— ๋ถ€๋”ชํžŒ ๊ฒฝ์šฐ)
        if(nx <= 0 || nx > n || ny <= 0 || ny > n || deque.contains(next))
            return false;

        // ํ˜„์žฌ ์œ„์น˜์— ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ
        if(apples.contains(next)){ // ์‚ฌ๊ณผ๊ฐ€ ์žˆ์œผ๋ฉด, ๊ทธ ์นธ์— ์‚ฌ๊ณผ๋Š” ์—†์–ด์ง€๊ณ  ๊ผฌ๋ฆฌ๋Š” ์—†์–ด์ง€์ง€ ์•Š๋Š”๋‹ค
            deque.offerFirst(next);
            apples.remove(next);
        }
        else{   // ์‚ฌ๊ณผ๊ฐ€ ์—†์œผ๋ฉด ์ด๋™
            deque.offerFirst(next);
            deque.removeLast();
        }

        return true;
    }

    // ์‹œ๊ณ„ ์ˆœ์œผ๋กœ ์ƒ(1) ์šฐ(2) ํ•˜(3) ์ขŒ(4)
    static int changeDir(int dir, int cnt){
        if(dirs.containsKey(cnt)){
            // ์™ผ์ชฝ ํšŒ์ „
            if(dirs.get(cnt) == 'L'){
                dir--;
                if(dir == 0)
                    dir = 4;
            }
            // ์˜ค๋ฅธ์ชฝ ํšŒ์ „
            else{
                dir++;
                if(dir == 5)
                    dir = 1;
            }
        }

        return dir;
    }
}
Comments