TIL (Today I Learned)/Algorithm

[๋ฐฑ์ค€] 1074๋ฒˆ Z

loki d 2021. 12. 11. 19:57
728x90

1074๋ฒˆ Z

๋ฌธ์ œ

์Šคํฌ๋ฆฐ์ƒท 2021-12-11 ์˜คํ›„ 7 54 44

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜ N, r, c๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

3 7 7

์ถœ๋ ฅ

rํ–‰ c์—ด์„ ๋ช‡ ๋ฒˆ์งธ๋กœ ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

63

์„ค๋ช…

  1. ํ•˜๋‚˜์”ฉ divide & conquer๋ฅผ ํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ...
  2. 4๊ฐœ๋กœ ๋‚˜๋ˆ„๊ณ  ๋‹จ์œ„๋ฉด์ ์„ ์ด์šฉํ•ด์„œ ๋ฌธ์ œํ’€์ด
  3. r,c์˜ ์œ„์น˜์— ๋”ฐ๋ผ ๋‹จ์œ„๋ฉด์ ์„ ๋”ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ count๋ฅผ ๋”ํ•ด์ค€๋‹ค.

    ์†Œ์Šค์ฝ”๋“œ

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

public class Main{
private static int N, r, c;
private static int count = 0;

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

    N = Integer.parseInt(st.nextToken());
    r = Integer.parseInt(st.nextToken());
    c = Integer.parseInt(st.nextToken());

    int n = (int)Math.pow(2, N);
    int x=0, y=0;
    while(n > 1) {
        n /= 2;
        // 1 ์™ผ์ชฝ ์œ„
        if(r < x+n && c < y+n) {

        }
        // 2 ์˜ค๋ฅธ์ชฝ ์œ„
        else if(r < x+n && c >= y+n) {
            count += n * n * 1;
            y += n; //์˜ค๋ฅธ์ชฝ ์œ„๋กœ ์œ„์น˜ ์ด๋™
        }
        // 3 ์™ผ์ชฝ ์•„๋ž˜
        else if(r>= x+n && c < y+n) {
            count += n * n * 2;
            x += n;
        }
        // 4 ์˜ค๋ฅธ์ชฝ ์•„๋ž˜
        else {
            count += n * n * 3;
            x += n;
            y += n;
        }
    }

    System.out.println(count);
}

}