10
08

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

 

10158๋ฒˆ: ๊ฐœ๋ฏธ

๊ฐ€๋กœ ๊ธธ์ด๊ฐ€ w์ด๊ณ  ์„ธ๋กœ ๊ธธ์ด๊ฐ€ h์ธ 2์ฐจ์› ๊ฒฉ์ž ๊ณต๊ฐ„์ด ์žˆ๋‹ค. ์ด ๊ฒฉ์ž๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์™ผ์ชฝ ์•„๋ž˜๊ฐ€ (0,0)์ด๊ณ  ์˜ค๋ฅธ์ชฝ ์œ„๊ฐ€ (w,h)์ด๋‹ค. ์ด ๊ณต๊ฐ„ ์•ˆ์˜ ์ขŒํ‘œ (p,q)์— ๊ฐœ๋ฏธ ํ•œ ๋งˆ๋ฆฌ๊ฐ€ ๋†“์—ฌ์žˆ๋‹ค. ๊ฐœ๋ฏธ๋Š” ์˜ค

www.acmicpc.net

import java.io.*;

class Main {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] map = br.readLine().split(" ");
        int w = Integer.parseInt(map[0]);
        int h = Integer.parseInt(map[1]);
        String[] start = br.readLine().split(" ");
        int p = Integer.parseInt(start[0]);
        int q = Integer.parseInt(start[1]);
        int t = Integer.parseInt(br.readLine());
        // p๊ฐ€ 0, w์— ๋‹ฟ์œผ๋ฉด ๋‹ค์Œ ์ด๋™์€ (๋ฐ˜์ „, ๊ทธ๋Œ€๋กœ) q๊ฐ€ 0,h์— ๋‹ฟ์œผ๋ฉด (๊ทธ๋Œ€๋กœ, ๋ฐ˜์ „)
        int dir = 0; // 0, 1, 2, 3 ์‹œ๊ณ„๋ฐฉํ–ฅ ์ˆœ์„œ๋Œ€๋กœ

        for(int i=0; i<t; i++){
            if(i!=0 && p == Integer.parseInt(start[0]) && q == Integer.parseInt(start[1])){
                if (t%i == 0) break;
                else{
                    t = t%i;
                }
            }
            switch (dir){
                case 0: {
                    // + +
                    p++;
                    q++;
                    if (p == w) dir = bounceX(0);
                    if (q == h) dir = bounceY(0);
                    if(p==w && q==h) dir = 2;
                }
                break;
                case 1: {
                    // + -
                    p++;
                    q--;
                    if (p == w) dir = bounceX(1);
                    if (q == 0) dir = bounceY(1);
                    if(p==w && q==0) dir = 3;
                }
                break;
                case 2: {
                    // - -
                    p--;
                    q--;
                    if (p == 0) dir = bounceX(2);
                    if (q == 0) dir = bounceY(2);
                    if(p==0 && q==0) dir = 0;
                }
                break;
                case 3: {
                    // - +
                    p--;
                    q++;
                    if (p == 0) dir = bounceX(3);
                    if (q == h) dir = bounceY(3);
                    if(p==0 && q==h) dir = 1;
                }
                break;
            }
        }

        System.out.printf("%d %d",p,q);
    }

    static int bounceX(int dir){
        int next = 0;
        switch (dir){
            case 0: {
                // + + ์ด๊ฒŒ ์ด์ „ ์ƒํƒœ, ๋‹ค์Œ ์ƒํƒœ๋กœ ๊ฐ€๋ ค๋ฉด?
                next=3;
                break;
            }
            case 1: {
                // + -
                next=2;
                break;
            }
            case 2: {
                // - -
                next=1;
                break;
            }
            case 3: {
                // - +
                next=0;
                break;
            }
        }
        return next;
    }

    static int bounceY(int dir){
        int next = 0;
        switch (dir){
            case 0: {
                // + + ์ด๊ฒŒ ์ด์ „ ์ƒํƒœ, ๋‹ค์Œ ์ƒํƒœ๋กœ ๊ฐ€๋ ค๋ฉด?
                next=1;
                break;
            }
            case 1: {
                // + -
                next=0;
                break;
            }
            case 2: {
                // - -
                next=3;
                break;
            }
            case 3: {
                // - +
                next=2;
                break;
            }
        }
        return next;
    }
}

์˜ค๋‹ต๋…ธํŠธ(ํ‘ธ๋Š” ๋™์•ˆ ์‚ฌ๊ณ ๊ณผ์ • ๋ฐ ๊ฐœ์„ ์ )

๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ด˜์ด˜ํžˆ ์งœ์„œ ์ง„ํ–‰ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค๊ณ„ํ–ˆ๋‹ค... ์˜ˆ์‹œ๋Š” ๋‹ค ๋งž์•˜๊ณ  ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜๋ฒ„๋ ธ๋‹ค.

๋‹ค์‹œ ์ถœ๋ฐœ์ง€์ ์— ๋„์ฐฉํ•˜๋Š” ๊ฒฝ์šฐ๋กœ ์„ค๊ณ„ํ•ด์„œ ์ œ์ถœํ•ด๋ดค์ง€๋งŒ ์—ฌ์ „ํžˆ ์‹œ์ดˆ๊ฐ€ ๋‚ฌ๋‹ค.


์ •๋‹ต์ฝ”๋“œ

import java.io.*;

class Main {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] map = br.readLine().split(" ");
        String[] start = br.readLine().split(" ");
        int W = Integer.parseInt(map[0]);
        int H = Integer.parseInt(map[1]);
        int P = Integer.parseInt(start[0]);
        int Q = Integer.parseInt(start[1]);
        int T = Integer.parseInt(br.readLine());

        int p = (P + T) % (2 * W);
        int q = (Q + T) % (2 * H);
        if (p > W) p = 2 * W - p;
        if (q > H) q = 2 * H - q;
        System.out.println(p + " " + q);
    }
}

 

๋„์ฐฉํ•˜๋Š” ๊ฒŒ ๋Šฅ์‚ฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์ถœ๋ฐœ์ง€์ ์—์„œ ์ถœ๋ฐœ ๋ฐฉํ–ฅ๋„ ๊ฐ™์„ ๋•Œ๋ฅผ ๊ณ ๋ คํ–ˆ์–ด์•ผ๋๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฃผ๊ธฐ๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•œ๋ฐ, ๊ทธ๋ƒฅ ๋Œ€๊ฐ์„ (์ด๋™)์„ ๊ธฐ์ค€์œผ๋กœ ์ฃผ๊ธฐ๋ฅผ ์žก์œผ๋ ค๋ฉด ๋ฌด์กฐ๊ฑด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค.

X, Y์ขŒํ‘œ์˜ ์ฃผ๊ธฐ๋ฅผ ๊ฐ๊ฐ ๊ด€์ฐฐํ•˜๋ฉด,

X๊ฐ€ ๋ฐฉํ–ฅ์ด ๊ฐ™์€ ์ขŒํ‘œ์— ๋„์ฐฉํ•˜๋Š” ์ฃผ๊ธฐ๊ฐ€ p = (T%2W)*N ์ด๊ณ  Y์ขŒํ‘œ๋Š” q = (T%2H)*N ์ด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฃผ๊ธฐ๋ฅผ ๊ตฌํ•  ๋•Œ X์ขŒํ‘œ Y์ขŒํ‘œ๋ฅผ ๋ถ„๋ฆฌ์‹œํ‚ค๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ X, Y ๋‘˜์ค‘ ํฐ ๊ฐ’์œผ๋กœ ๊ท€์†๋˜๋‹ˆ๊นŒ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€์•Š๋Š”๋‹ค..!

 

์ถœ๋ฐœ์ง€์ ์ด ์ง€๊ธˆ์€ (0,0)์ด ์•„๋‹Œ๋ฐ ์ถœ๋ฐœ์ง€์ ์„ ์›์ ์œผ๋กœ ๋•ก๊ฒจ์„œ ๋ณด๋ฉด ์ฃผ๊ธฐ๋ฅผ ์•„์ฃผ ๋นจ๋ฆฌ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค. ์ด๋•Œ ๋•ก๊ธฐ๋Š” ์ •๋„๊ฐ€ ์ดˆ๊ธฐ ์ขŒํ‘œ๋งŒํผ์ด๊ธฐ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ์กฐ์ ˆ์„ ์ž˜ ํ•ด์•ผํ•œ๋‹ค. p, q ๊ฐ€ W, H ๋ณด๋‹ค ํด ๋•Œ 2*W-p ์ž‘์—…์„ ํ•ด์ฃผ๋Š” ์ด์œ ๊ฐ€ ๊ทธ ๋•Œ๋ฌธ์ด๋‹ค.

 

์œ„ ์ •๋‹ต์ฝ”๋“œ๋Š” ๋†€๋ž๊ฒŒ๋„ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค..!

๊ทธ ์ด์œ ๋Š” java ๋ฒ„์ „์— ๋”ฐ๋ฅธ ์˜ค์ฐจ๋กœ, 11๋กœ ํ–ˆ์„๋•Œ๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ, 8๋กœ ํ–ˆ์„๋•Œ๋Š” ๋ฌด์‚ฌํžˆ ์ฑ„์ ์™„๋ฃŒ๊ฐ€ ๋œ๋‹ค.

 

 

"๋Œ“๊ธ€, ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์‹œ๋ฉด ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค"

 

๋ฐ˜์‘ํ˜•
COMMENT