๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ› Others.../- ์‹ค์ „ ๋ฌธ์ œ ํ’€์ด : PS

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 1063๋ฒˆ ํ‚น ์ž๋ฐ” ๋ฌธ์ œ ํ’€์ด

by Wonit 2021. 3. 29.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ ๋ฌธ์ œ ์ด๋ฆ„ ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

1063๋ฒˆ: ํ‚น

8*8ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์— ์™•์ด ํ•˜๋‚˜ ์žˆ๋‹ค. ํ‚น์˜ ํ˜„์žฌ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฒด์ŠคํŒ์—์„œ ๋ง์˜ ์œ„์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฃผ์–ด์ง„๋‹ค. ์•ŒํŒŒ๋ฒณ ํ•˜๋‚˜์™€ ์ˆซ์ž ํ•˜๋‚˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”๋ฐ, ์•ŒํŒŒ๋ฒณ์€ ์—ด์„ ์ƒ์ง•ํ•˜๊ณ , ์ˆซ์ž๋Š”

www.acmicpc.net

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

๋ฌธ์ œ ์ ‘๊ทผ

์ด ๋ฌธ์ œ๋Š” 8 * 8 ์ฒด์ŠคํŒ์—์„œ ํ•˜๋‚˜์˜ ์ฒด์Šค (King)์ด ์žˆ๋Š”๋ฐ, ํ•ด๋‹น ์ฒด์Šค๊ฐ€ ๋‘ ๊ฐ€์ง€ ์ œ์•ฝ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์›€์ง์ผ ๋•Œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ œ์•ฝ ์กฐ๊ฑด์—๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

  1. ํ‚น๊ณผ ๋Œ์€ 8 by 8 ์ฒด์ŠคํŒ์„ ๋ฒ—์–ด๋‚  ์ˆ˜ ์—†๋‹ค. ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋ฒ—์–ด๋‚œ๋‹ค๋ฉด ์•„์˜ˆ ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค.
  2. ํ‚น์ด ์›€์ง์ผ ๊ณณ์— ๋Œ์ด ์œ„์น˜ํ•œ๋‹ค๋ฉด ํ‚น์ด ๋Œ์˜ ์œ„์น˜๋กœ ์œ„์น˜ํ•˜๊ฒŒ ๋˜๊ณ  ๋Œ์ด ํ‚น์ด ๊ฐ€๋ ค๊ณ  ํ–ˆ๋˜ ์œ„์น˜๋งŒํผ ์ด๋™ํ•œ๋‹ค.

ํ•ด๊ฒฐ๋ฒ•

๊ทธ๋Ÿผ ์šฐ์„  ์–ด๋–ค ๊ฒƒ๋“ค์ด ํ•„์š”ํ•  ์ง€๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

  • ์›€์ง์ด๋ ค๋Š” ๊ณณ์ด ์ฒด์Šค ํŒ ๋‚ด๋ถ€์ธ๊ฐ€, ์ฆ‰ ์œ ํšจํ•œ ์›€์ง์ž„์ธ๊ฐ€?
    • mapValidation()
  • ์‚ฌ์šฉ์ž๋Š” ์–ด๋–ค ๋ช…๋ น์„ ์ฃผ๊ณ  ์žˆ์œผ๋ฉฐ ์–ผ๋งŒํผ ์›€์ง์ผ ๊ฒƒ์ธ๊ฐ€?
    • getMovement()
  • A1, G2, D5 ์™€ ๊ฐ™์€ ์ฒด์Šค ๋งต์„ ์–ด๋–ป๊ฒŒ ๋ฐฐ์—ด๋กœ ํ‘œ์‹œํ•  ๊ฒƒ์ธ๊ฐ€?
    • updatePositioin()

์˜ค๋‹ต ํ›„๋ณด

๋‚˜์—๊ฒŒ ์ด๋ฒˆ ๋ฌธ์ œ์—์„œ ๊ฐ€์žฅ ํฐ ์–ด๋ ค์›€์€ ์˜๋ฌธ๊ณผ ์ˆซ์ž์˜ ์กฐํ•ฉ์œผ๋กœ ๋œ x, y ์ขŒํ‘œ๋ฅผ ์ˆซ์ž ์ขŒํ‘œ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

 

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

์ •๋‹ต ์ฝ”๋“œ

public class Main {
  private static int[][] movements = {
            {1, 0}, // 0 : R ์˜ค๋ฅธ์ชฝ์œผ๋กœ
            {-1, 0}, // 1 : L ์™ผ์ชฝ์œผ๋กœ
            {0, 1}, // 2 : B ์•„๋ž˜๋กœ
            {0, -1}, // 3: T ์œ„๋กœ
            {1, -1}, // 4 : RT ์˜ค๋ฅธ์ชฝ ๋Œ€๊ฐ์„  ์œ„๋กœ
            {-1, -1}, // 5 : LT ์™ผ์ชฝ ๋Œ€๊ฐ์„  ์œ„๋กœ
            {1, 1}, // 6 : RB ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ๋Œ€๊ฐ
            {-1, 1} // 7 : LB ์™ผ์ชฝ ์•„๋ž˜ ๋Œ€๊ฐ
    };

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] inputs = br.readLine().split(" ");

        String[] kingPosition = inputs[0].split("");
        String[] stonePosition = inputs[1].split("");

        int loop = Integer.parseInt(inputs[2]);

        while(loop-- > 0) {

            String move = br.readLine();

            int kingX = kingPosition[0].charAt(0) - 65; // A = 0 B = 1    x
            int kingY = Math.abs(Integer.parseInt(kingPosition[1]) - 8); // 1 = 7 2 = 6    y

            int stoneX = stonePosition[0].charAt(0) - 65;
            int stoneY = Math.abs(Integer.parseInt(stonePosition[1]) - 8);

            int movementIndex = getMovement(move);
            boolean flag = false;
            if(mapValidator(movements[movementIndex], kingX, kingY)) {

                int xx = kingX + movements[movementIndex][0];
                int yy = kingY + movements[movementIndex][1];

                if(xx == stoneX && yy == stoneY) {

                    if(mapValidator(movements[movementIndex], stoneX, stoneY)) {
                        kingX = stoneX; kingY = stoneY;
                        stoneX += movements[movementIndex][0]; stoneY += movements[movementIndex][1];
                    }
                    flag = true;
                }
                if(!flag) {
                    kingX += movements[movementIndex][0];
                    kingY += movements[movementIndex][1];
                }
            }

            updatePosition(kingPosition, kingX, kingY);
            updatePosition(stonePosition, stoneX, stoneY);
        }

        System.out.println(kingPosition[0] + kingPosition[1] +"\n" + stonePosition[0] + stonePosition[1]);
    }

    private static void updatePosition(String[] position, int x, int y) {
        position[0] = String.valueOf((char) (x + 65));
        position[1] = String.valueOf(Math.abs(y - 8));
    }

    private static boolean mapValidator(int[] movement, int x, int y) {
        int xx = movement[0] + x;
        int yy = movement[1] + y;

        return 0 <= xx && xx < 8 && yy >= 0 && yy < 8;
    }

    private static int getMovement(String move) {
        if(move.equals("R")) {
            return 0;
        }else if(move.equals("L")) {
            return 1;
        }else if(move.equals("B")) {
            return 2;
        }else if(move.equals("T")) {
            return 3;
        }else if(move.equals("RT")) {
            return 4;
        }else if(move.equals("LT")) {
            return 5;
        }else if(move.equals("RB")) {
            return 6;
        }else if(move.equals("LB")) {
            return 7;
        }
        else return Integer.MAX_VALUE;
    }
}

๋ฌธ์ œ ํšŒ๊ณ 

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์‹ค๋ฒ„ 5์ธ๋ฐ ์—„์ฒญ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ๋ฌธ์ œ์ด๋‹ค.
์•„๋งˆ ์•„์ฃผ ์˜ค๋žœ๋งŒ์— ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ String to Char ๋„ ๊ธฐ์–ต๋„ ์•ˆ ๋‚ฌ์œผ๋ฉฐ ์•„์Šคํ‚ค ์ฝ”๋“œ๊นŒ์ง€ ๊นŒ๋จน๊ณ  ์‹œ์ž‘์„ ํ•ด์„œ ๋‹ค์‹œ ์ฐพ์•„๋ณด๋Š๋ผ ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๋‹ค.
์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ๊ฐ€์žฅ ๊ทผ๋ณธ์ ์ธ ์ด์œ ๋Š” ๋‚ด ๊ฐœ๋ฐœ ํ”ผ์ง€์ปฌ ๋•Œ๋ฌธ์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค.
๋Œ€์ถฉ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค๋ผ๋Š” ๊ฒƒ์€ ์•Œ๊ฒ ์ง€๋งŒ ์ด๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ์ฐธ ๊นŒ๋‹ค๋กญ๋‹ค.

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€