๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/๊ตฌํ˜„

[๋ฐฑ์ค€]2564๋ฒˆ: ๊ฒฝ๋น„์›

by syLim___ 2023. 10. 27.
728x90

https://www.acmicpc.net/problem/2564

 

2564๋ฒˆ: ๊ฒฝ๋น„์›

์ฒซ์งธ ์ค„์— ๋ธ”๋ก์˜ ๊ฐ€๋กœ์˜ ๊ธธ์ด์™€ ์„ธ๋กœ์˜ ๊ธธ์ด๊ฐ€ ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์— ์ƒ์ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋ธ”๋ก์˜ ๊ฐ€๋กœ์˜ ๊ธธ์ด์™€ ์„ธ๋กœ์˜ ๊ธธ์ด, ์ƒ์ ์˜ ๊ฐœ์ˆ˜๋Š” ๋ชจ๋‘ 100์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์ด์–ด ํ•œ ์ค„

www.acmicpc.net


๋„ˆ๋ฌด๋„ˆ๋ฌด ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ฌธ์ œ์˜€๋”ฐ...

 


 

1. ๊ฐ ์ƒ์  ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค,

๊ฐ ์ƒ์ ์˜ ์›์  ๊ธฐ์ค€ ์‹œ๊ณ„๋ฐฉํ–ฅ ๊ฑฐ๋ฆฌ์™€ ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ์ €์žฅํ•ด๋†“๋Š”๋‹ค.

ใ…‡ใ…‡

2. ๋™๊ทผ์ด์˜ ์œ„์น˜๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ ,

1์—์„œ ์ž…๋ ฅํ•ด๋‘” ์ •๋ณด๋“ค์„ ๊ฐ€์ง€๊ณ  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ์ƒ์ ๋ณ„๋กœ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

 


 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] line = reader.readLine().split(" ");
        int w = Integer.parseInt(line[0]);
        int h = Integer.parseInt(line[1]);

        int n = Integer.parseInt(reader.readLine());
        int[][] distFromOrigin = new int[n][3]; 

        for (int i=0; i<n; i++){
            line = reader.readLine().split(" ");
            int direction = Integer.parseInt(line[0]);
            int distance = Integer.parseInt(line[1]);

            int left = 0;
            int right = 0;
            switch(direction){
                case 1:
                    left = h + distance;
                    right = w + h + (w-distance);
                    break;
                case 2:
                    left = h + w + h + (w-distance);
                    right = distance;
                    break;
                case 3:
                    left = h-distance;
                    right = w  + h + w + distance;
                    break;
                case 4:
                    left = h + w + distance;
                    right = w + (h-distance);
                    break;
            }

            distFromOrigin[i][0] = left;    // ์›์ ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ ๊ฑฐ๋ฆฌ
            distFromOrigin[i][1] = right;   // ์›์ ์œผ๋กœ๋ถ€ํ„ฐ ์‹œ๊ณ„๋ฐฉํ–ฅ๊ฑฐ๋ฆฌ
            distFromOrigin[i][2] = direction;   // ์ƒ์ ์ด ์œ„์น˜ํ•œ ๋ฐฉํ–ฅ
            
        }

        // ๋™๊ทผ์ด์˜ ์œ„์น˜
        line = reader.readLine().split(" ");
        int direction = Integer.parseInt(line[0]);
        int distance = Integer.parseInt(line[1]);

        int left = 0; // ์›์ ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ ๊ฑฐ๋ฆฌ 
        int right = 0; // ์›์ ์œผ๋กœ๋ถ€ํ„ฐ ์‹œ๊ณ„๋ฐฉํ–ฅ ๊ฑฐ๋ฆฌ
        int answer = 0;
        switch(direction){
            case 1:
                left = h + distance;
                right = w + h + (w-distance);
                for (int i=0; i<n; i++){
                    int dir = distFromOrigin[i][2];
                    switch (dir){
                        case 1:
                            answer += Math.abs(left - distFromOrigin[i][0]);
                            break;
                        case 2:
                            answer += Math.min(right - distFromOrigin[i][1], left + distFromOrigin[i][1]);
                            break;
                        case 3:
                            answer += left - distFromOrigin[i][0];
                            break;
                        case 4:
                            answer += distFromOrigin[i][1] - right;
                            break;
                    }
                }
                break;
            case 2:
                left = h + w + h + (w-distance);
                right = distance;
                for (int i=0; i<n; i++){
                    int dir = distFromOrigin[i][2];
                    switch (dir){
                        case 1:
                            answer += Math.min(right + distFromOrigin[i][0], distFromOrigin[i][1] - right);
                            break;
                        case 2:
                            answer += Math.abs(right - distFromOrigin[i][1]);
                            break;
                        case 3:
                            answer += right + distFromOrigin[i][0];
                            break;
                        case 4:
                            answer += distFromOrigin[i][1] - right;
                            break;
                    }
                }
                break;
            case 3:
                left = h - distance;
                right = w + h + w + distance;
                for (int i=0; i<n; i++){
                    int dir = distFromOrigin[i][2];
                    switch (dir){
                        case 1:
                            answer += distFromOrigin[i][0] - left;
                            break;
                        case 2:
                            answer += left + distFromOrigin[i][1];
                            break;
                        case 3:
                            answer += Math.abs(left - distFromOrigin[i][0]);
                            break;
                        case 4:
                            answer += Math.min(distFromOrigin[i][0] - left, left + distFromOrigin[i][1]);
                            break;
                    }
                }
                break;
            case 4:
                left = h + w + distance;
                right = w + (h-distance);
                for (int i=0; i<n; i++){
                    int dir = distFromOrigin[i][2];
                    switch (dir){
                        case 1:
                            answer += left - distFromOrigin[i][0];
                            break;
                        case 2:
                            answer += right - distFromOrigin[i][1];
                            break;
                        case 3:
                            answer += Math.min(left - distFromOrigin[i][0],right + distFromOrigin[i][0]);
                            break;
                        case 4:
                            answer += Math.abs(right - distFromOrigin[i][1]);
                            break;
                    }
                }
                break;
        }


        System.out.println(answer);
    }
}
728x90