Algorithm

๋ฐฑ์ค€ 1322 | ๋น„ํŠธ ์—ฐ์‚ฐ, X์™€ K

osean 2020. 11. 25. 04:25

CT ๋ถ€์…”๋ณด๊ธฐ

์ด๋ฒˆ ๋ฌธ์ œ๋„ SSAFY๋ฅผ ์ค€๋น„ํ•˜๋ฉฐ ์ถ”์ฒœ ๋ฐ›์€ ๋ฌธ์ œ์—ฌ์„œ ํ’€๊ฒŒ ๋˜์—ˆ๋‹ค.
ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๋น„ํŠธ ์—ฐ์‚ฐ์„ ์‘์šฉํ•ด ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ธ๋ฐ, ์ง€๊ธˆ๊นŒ์ง€ ๋น„ํŠธ ์—ฐ์‚ฐ์ด๋ผ๋Š” ๋ง์„ ๋“ค์–ด๋งŒ ๋ดค์ง€ ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ์ง€ ๊ณต๋ถ€ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

๋น„ํŠธ ์—ฐ์‚ฐ์€ ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋น„๊ต ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ•˜๋˜ & ๋‚˜ | ๋“ฑ์„ ํ™œ์šฉํ•ด ๋น„ํŠธ(bit, 2์ง„์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ ๋‹จ์œ„)๋ฅผ ์—ฐ์‚ฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๋จผ์ € ๋น„ํŠธ ์—ฐ์‚ฐ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ณ  ๋ฐฑ์ค€ ๋ฌธ์ œ๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ํ•˜์ž!

๋น„ํŠธ ์—ฐ์‚ฐ

 

์ฝ”๋”ฉ๊ต์œก ํ‹ฐ์”จํ”ผ์Šค์ฟจ

4์ฐจ์‚ฐ์—…ํ˜๋ช…, ์ฝ”๋”ฉ๊ต์œก, ์†Œํ”„ํŠธ์›จ์–ด๊ต์œก, ์ฝ”๋”ฉ๊ธฐ์ดˆ, SW์ฝ”๋”ฉ, ๊ธฐ์ดˆ์ฝ”๋”ฉ๋ถ€ํ„ฐ ์ž๋ฐ” ํŒŒ์ด์ฌ ๋“ฑ

tcpschool.com

์ฒ˜์Œ ๋…ํ•™์„ ํ•˜๋ฉฐ ๋น„๊ต ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•  ๋•Œ ๋‹จ์ˆœํžˆ ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•˜๋Š” ์šฉ๋„๋กœ๋งŒ ์ƒ๊ฐํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋น„๊ต ์—ฐ์‚ฐ์ž๋Š” ์ƒ์ „ ๋“ฃ์ง€๋„ ๋ณด์ง€๋„ ๋ชปํ•œ ๋ช…์ œ ๋…ผ๋ฆฌ์— ์˜ํ•œ ๋…ผ๋ฆฌ์  ์ถ”๋ก ๊ณผ ์ง„๋ฆฌํ‘œ์— ๊ธฐ์ธํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด์—ˆ๋‹ค.

(์ค‘๋“ฑ ์ˆ˜ํ•™๋ถ€ํ„ฐ ์ˆ˜ํ•™์„ ํฌ๊ธฐํ•œ ์œ ๋ช…ํ•œ ์ˆ˜ํฌ์ž๋‹ค.)

 

๋…ผ๋ฆฌ์  ์ถ”๋ก , ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž,์ง„๋ฆฌํ‘œ [์ด์‚ฐ์ˆ˜ํ•™]

๋…ผ๋ฆฌ์  ์ถ”๋ก ์ด๋ž€ ๊ฒƒ์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฉ์–ด๋ถ€ํ„ฐ ์•Œ์•„์•ผ ํ•˜์ง€ ์•Š๊ฒ ์–ด? ์ •์˜(definition) ์šฉ์–ด์˜ ๋œป์„ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ *๋ฌด์ •์˜ ์ •์˜: ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ์šฉ์–ด ๋ฌธ

luv-n-interest.tistory.com

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

N๊ณผ M์˜ ์ด์ง„์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ • ํ–ˆ์„ ๋•Œ, ๋‘ ์ด์ง„์ˆ˜์˜ i ๋ฒˆ์งธ์˜ ๊ฐ’์ด ์„œ๋กœ 1์ผ ๊ฒฝ์šฐ์— & ์—ฐ์‚ฐ์ž๋Š” 1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ 1์ผ ๊ฒฝ์šฐ์— | ์—ฐ์‚ฐ์ž๋„ 1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฆ‰, & ์—ฐ์‚ฐ์ž์˜ ๊ฒฝ์šฐ ๋…ผ๋ฆฌ๊ณฑ์œผ๋กœ์„œ N๊ณผ M์˜ i ๋ฒˆ์งธ ๊ฐ’์ด ์ฐธ์ด์–ด์•ผ ๊ฒฐ๊ณผ๋„ ์ฐธ์ด๋‹ค.
๋ฐ˜๋ฉด | ์—ฐ์‚ฐ์ž์˜ ๊ฒฝ์šฐ ๋…ผ๋ฆฌํ•ฉ์œผ๋กœ์„œ N๊ณผ M์˜ i ๋ฒˆ์งธ ๊ฐ’ ๋ชจ๋‘๊ฐ€ ๊ฑฐ์ง“์ด์–ด์•ผ ๊ฒฐ๊ณผ๋„ ๊ฑฐ์ง“์ด ๋œ๋‹ค.

์ด์ฒ˜๋Ÿผ ^ ์—ฐ์‚ฐ์ž์˜ ๊ฒฝ์šฐ i ๋ฒˆ์งธ ๊ฐ’์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ 1 ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ~ ์—ฐ์‚ฐ์ž์˜ ๊ฒฝ์šฐ N์˜ i ๋ฒˆ์งธ ๊ฐ’์ด 1์ผ ๋•Œ๋Š” 0์„ 0์ผ ๋•Œ๋Š” 1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.์ด๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ํฐ ์–ด๋ ค์›€์€ ์—†์—ˆ์ง€๋งŒ

๋น„ํŠธ ์—ฐ์‚ฐ์„ ์ดํ•ดํ•˜๋Š”๋ฐ ํฐ ์–ด๋ ค์›€์€ ์—†์—ˆ์ง€๋งŒ ๋…ผ๋ฆฌ๊ณฑ, ๋…ผ๋ฆฌํ•ฉ ๋“ฑ ๋…ผ๋ฆฌ์— ๋Œ€ํ•œ ์˜์—ญ์ด ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค. ์•ž์„œ ๋งํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ ๋‚˜์—๊ฒŒ ์ˆ˜ํ•™์€ ๋‚จ์˜ ๋‚˜๋ผ ์ด์•ผ๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์•˜๋‹ค.

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com

์‚ผ์„ฑ SW Expert Academy์—์„œ ๋…ผ๋ฆฌ์  ์‚ฌ๊ณ , Computational Thinking์— ๋Œ€ํ•œ ๊ต์œก ์˜์ƒ์„ ์ฐธ๊ณ ํ•ด ๋…ผ๋ฆฌ์  ์ถ”๋ก ์— ๋Œ€ํ•ด ์กฐ๊ธˆ์ด๋‚˜๋งˆ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

X์™€ K

 

1322๋ฒˆ: X์™€ K

์ฒซ์งธ ์ค„์— X์™€ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. X์™€ K๋Š” 2,000,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์ž์—ฐ์ˆ˜ X์™€ K๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, X + Y ์™€ X | Y ๊ฐ€ ๊ฐ™์„ ์ˆ˜ ์žˆ๋Š” K ๋ฒˆ์งธ ์ž์—ฐ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๋จผ์ € ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Java์—์„œ ์ œ๊ณตํ•˜๋Š” Math.pow() ๋ฉ”์†Œ๋“œ๋ฅผ ์•Œ์•„๋‘๋ฉด ํŽธํ•˜๋‹ค.

  • Math.pow()

X, Y๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ ๋ฐ ๋น„ํŠธ ์—ฐ์‚ฐ

K = 2 (2 ๋ฒˆ์งธ Y ๊ฐ’์„ ๊ตฌํ–ˆ์„ ๋•Œ)
X = 5 → 101
Y = 2 → 10
5 + 2 == 101 | 10 → 7 == 111

K = 20 (20 ๋ฒˆ์งธ Y ๊ฐ’์„ ๊ตฌํ–ˆ์„ ๋•Œ)
X = 5 → 101
Y = 80 → 110000
5 + 80 == 101 | 1010000 → 85 == 1010101
  • X + Y == X | Y ๋ฅผ ์—ฐ์‚ฐ ํ•˜๋ ค๋ฉด X๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ ํ–ˆ์„ ๋•Œ, 0์ธ ์ธ๋ฑ์Šค๊ฐ€ 1์ธ Y๊ฐ€ ์œ„ ์กฐ๊ฑด์— ํ•ด๋‹นํ•œ๋‹ค.
    • X๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ ํ–ˆ์„ ๋•Œ, X์˜ i ์ธ๋ฑ์Šค ๊ฐ’($2^n$)๊ฐ€ K๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ๋งŒํผ X์˜ ์ด์ง„์ˆ˜ ๊ฐ’์—์„œ 0์ธ ๋ถ€๋ถ„์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค.
    • ์ด๋Š” Y๊ฐ€ X๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ๋„ ํฌํ•จํ•œ๋‹ค.
  • X์—์„œ 0์ธ ์ž๋ฆฌ๊ฐ€ 1์ธ ์ž์—ฐ์ˆ˜($2^n$)๋ฅผ ์ฐพ๊ณ , ํ•ด๋‹น ์ž์—ฐ์ˆ˜์™€ X๋ฅผ ๋น„ํŠธ ์—ฐ์‚ฐ์„ ํ–ˆ์„ ๋•Œ X์™€ ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค๋ฉด ์ž์—ฐ์ˆ˜๋ฅผ ๋ฆฌ์ŠคํŠธ ํ˜น์€ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.
    • ์œ„์˜ ๋ฆฌ์ŠคํŠธ ํ˜น์€ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ m ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  $2^m$์˜ ๊ฐ’์ด K๋ณด๋‹ค ์ž‘์„ ๋•Œ ๋งŒํผ ๋ฐ˜๋ณตํ•˜์—ฌ X์˜ 0์ธ ์ž๋ฆฟ์ˆ˜๊ฐ€ 1์ธ ์ž์—ฐ์ˆ˜ ๋ชจ๋‘๋ฅผ ๋ฆฌ์ŠคํŠธ ํ˜น์€ ์ €์žฅํ•œ๋‹ค.
  • m ๋งŒํผ ๋‹ค์‹œ ๋ฐ˜๋ณตํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ํ˜น์€ ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์œ„์— ์กด์žฌํ•˜๋Š” Y(์ €์žฅ๋œ ์ž์—ฐ์ˆ˜)๋ฅผ ๊บผ๋‚ด์–ด ๊ฒฐ๊ณผ๊ฐ’ 0๊ณผ ๊ณ„์† ๋”ํ•œ๋‹ค.
    • ๋˜ํ•œ, K์— $2^i$๋ฅผ ๋นผ์„œ X + Y == X | Y ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š” Y ๊ฐ’์€ ์ œ์™ธํ•œ๋‹ค.
    • ์ด ๋•Œ, i๋Š” ๋ฐ˜๋ณตํ•˜๋ฉฐ ๊ฐ์†Œํ•˜๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ i์ด๋‹ค.

์ฝ”๋“œ

 

1322. X์™€ K

๋ฌธ์ œ๋งํฌ : https://www.acmicpc.net/problem/1322 - ์†Œ์Šค ์ฝ”๋“œ - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48..

algwang.tistory.com

package ์‹ฌ์„ฑํ—Œ.์•Œ๊ณ ๋ฆฌ์ฆ˜_5์ฃผ์ฐจ.๋ฐฑ์ค€;

import java.io.*;
import java.util.*;

public class X์™€K_1322 {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws Exception {
        String[] input = br.readLine().split(" ");
        long x = Long.parseLong(input[0]);
        long k = Long.parseLong(input[1]);
        long save = 1;
        long result = 0;
        ArrayList<Long> arr = new ArrayList<Long>();

        while ((long) Math.pow(2, arr.size()) <= k) {
            System.out.print(arr.size() + " ");
            System.out.println(save);
            if ((x | save) != x) {
                arr.add(save);
            }
            save *= 2;
        }

        for (int i = 0; i < arr.size(); i++) {
            System.out.print(arr.get(i) + " ");
        }
        System.out.println();
        for (int i = arr.size() - 1; i >= 0; i--) {
            if (k == 0) {
                break;
            } else {
                if ((long) Math.pow(2, i) <= k) {
                    result += arr.get(i);
                    System.out.println("result = " + result);
                    k -= (long) Math.pow(2, i);
                }
            }
        }
        bw.write(result + "");
        bw.flush();
        bw.close();
    }
}

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์œ„ ๋ธ”๋กœ๊ฑฐ ๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค.
์†์œผ๋กœ ์ง์ ‘ ํ‘ผ๋‹ค๋ฉด ๋…ธ๊ฐ€๋‹ค๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ, ์ด๊ฑธ ์ฝ”๋“œ๋กœ ํ’€์–ด ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ์ •๋ง ์–ด๋ ค์› ๋‹ค.
๊ฐ€์žฅ ์ดํ•ดํ•˜๊ณ  ์ ‘๊ทผํ•˜๊ธฐ ์–ด๋ ค์› ๋˜ ๋ถ€๋ถ„์€ X + Y ์™€ X | Y ๊ฐ€ ๊ฐ™๋‹ค๋Š” ๊ฑธ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ•™์ ์œผ๋กœ ์ฆ๋ช…ํ•ด์•ผ ํ• ์ง€ ๊ฐ์ด ์žกํžˆ์ง€ ์•Š์•„์„œ ์ดํ•ดํ•˜๋Š”๋ฐ ๊ต‰์žฅํžˆ ์˜ค๋žœ ์‹œ๊ฐ„์ด ์†Œ์š”๋๋‹ค.(์ฐธ๊ณ ๋กœ ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๋ฐฑ์ค€ ๊ณจ๋“œ4 ๋ ˆ๋ฒจ์ด๋‹ค.)
๊ทธ๋ž˜๋„ ์ด๋ฒˆ ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด ๋น„ํŠธ ์—ฐ์‚ฐ์€ ๋ฌด์—‡์ธ์ง€, Math.pow() ๋ฉ”์†Œ๋“œ๊ฐ€ ์–ด๋–ค ์šฉ๋„์ธ์ง€, ์™œ ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๊ฐ€ ๊ตฌ์„ฑ ๋˜์—ˆ๋Š”์ง€ ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์‹œ๊ฐ„์ด์—ˆ๋‹ค.

์•„์ง ๊ฐ€์•ผ ํ•  ๊ธธ์ด ๋ฉ€์ง€๋งŒ ํ•˜๋‚˜์”ฉ ๋ฐฐ์›Œ์„œ ๋‚ด ๊ฒƒ์ด ๋˜๋Š” ์ด ๊ณผ์ •์ด ์ฐธ ์žฌ๋ฏธ์žˆ๋‹ค.
์žฌ๋ฏธ์žˆ๋Š” ๋งŒํผ ์ž˜ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋” ๋…ธ๋ ฅ ํ•ด์•ผ๊ฒ ๋‹ค!