CT ๋ถ์ ๋ณด๊ธฐ
์ด๋ฒ ๋ฌธ์ ๋ SSAFY๋ฅผ ์ค๋นํ๋ฉฐ ์ถ์ฒ ๋ฐ์ ๋ฌธ์ ์ฌ์ ํ๊ฒ ๋์๋ค.
ํด๋น ๋ฌธ์ ๋ ๋นํธ ์ฐ์ฐ์ ์์ฉํด ํด๊ฒฐํด์ผ ํ๋ ๋ฌธ์ ์ธ๋ฐ, ์ง๊ธ๊น์ง ๋นํธ ์ฐ์ฐ์ด๋ผ๋ ๋ง์ ๋ค์ด๋ง ๋ดค์ง ์ ํํ ๋ฌด์์ธ์ง ๊ณต๋ถํ์ง ๋ชปํ๋ค.
๋นํธ ์ฐ์ฐ์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ๋ฉด์ ๋น๊ต ์ฐ์ฐ์๋ก ์ฌ์ฉํ๋ &
๋ |
๋ฑ์ ํ์ฉํด ๋นํธ(bit, 2์ง์๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ ๋จ์)๋ฅผ ์ฐ์ฐํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋จผ์ ๋นํธ ์ฐ์ฐ์ ๋ํด ๊ณต๋ถํ๊ณ ๋ฐฑ์ค ๋ฌธ์ ๋ก ๋์ด๊ฐ๋๋ก ํ์!
๋นํธ ์ฐ์ฐ
์ฒ์ ๋ ํ์ ํ๋ฉฐ ๋น๊ต ์ฐ์ฐ์์ ๋ํด ๊ณต๋ถํ ๋ ๋จ์ํ ์กฐ๊ฑด์ ๊ฒ์ฌํ๋ ์ฉ๋๋ก๋ง ์๊ฐํ๋ค. ํ์ง๋ง ๋น๊ต ์ฐ์ฐ์๋ ์์ ๋ฃ์ง๋ ๋ณด์ง๋ ๋ชปํ ๋ช ์ ๋ ผ๋ฆฌ์ ์ํ ๋ ผ๋ฆฌ์ ์ถ๋ก ๊ณผ ์ง๋ฆฌํ์ ๊ธฐ์ธํด ๋ง๋ค์ด์ง ๊ฒ์ด์๋ค.
(์ค๋ฑ ์ํ๋ถํฐ ์ํ์ ํฌ๊ธฐํ ์ ๋ช
ํ ์ํฌ์๋ค.)
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ฅผ ์ด์ฉํด ๋นํธ ์ฐ์ฐ์ ์ํํ ์ ์๋๋ฐ, ์ ํํ ์๋ฏธ๋ฅผ ํ์ ํ์ง ๋ชปํ์ง๋ง ๊ทธ๋๋ ์ฉ๋์ ๋ํด์๋ ํ์ ํ๊ณ ์์ด์ ์ดํดํ๋๋ฐ ํฐ ์ด๋ ค์์ ์์๋ค.
N๊ณผ M์ ์ด์ง์๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์ ๋, ๋ ์ด์ง์์ i
๋ฒ์งธ์ ๊ฐ์ด ์๋ก 1
์ผ ๊ฒฝ์ฐ์ &
์ฐ์ฐ์๋ 1
์ ๋ฐํํ๊ณ , ๋ ์ค ํ๋๋ง 1
์ผ ๊ฒฝ์ฐ์ |
์ฐ์ฐ์๋ 1
์ ๋ฐํํ๋ค.
์ฆ, &
์ฐ์ฐ์์ ๊ฒฝ์ฐ ๋
ผ๋ฆฌ๊ณฑ์ผ๋ก์ N๊ณผ M์ i ๋ฒ์งธ ๊ฐ์ด ์ฐธ
์ด์ด์ผ ๊ฒฐ๊ณผ๋ ์ฐธ
์ด๋ค.
๋ฐ๋ฉด |
์ฐ์ฐ์์ ๊ฒฝ์ฐ ๋
ผ๋ฆฌํฉ์ผ๋ก์ N๊ณผ M์ i ๋ฒ์งธ ๊ฐ ๋ชจ๋๊ฐ ๊ฑฐ์ง
์ด์ด์ผ ๊ฒฐ๊ณผ๋ ๊ฑฐ์ง
์ด ๋๋ค.
์ด์ฒ๋ผ ^
์ฐ์ฐ์์ ๊ฒฝ์ฐ i ๋ฒ์งธ ๊ฐ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ 1
์ ๋ฐํํ๊ณ , ~
์ฐ์ฐ์์ ๊ฒฝ์ฐ N์ i ๋ฒ์งธ ๊ฐ์ด 1
์ผ ๋๋ 0
์ 0
์ผ ๋๋ 1
์ ๋ฐํํ๋ค.์ด๋ฅผ ์ดํดํ๋๋ฐ ํฐ ์ด๋ ค์์ ์์์ง๋ง
๋นํธ ์ฐ์ฐ์ ์ดํดํ๋๋ฐ ํฐ ์ด๋ ค์์ ์์์ง๋ง ๋ ผ๋ฆฌ๊ณฑ, ๋ ผ๋ฆฌํฉ ๋ฑ ๋ ผ๋ฆฌ์ ๋ํ ์์ญ์ด ์ดํด๊ฐ ๋์ง ์์๋ค. ์์ ๋งํ ๊ฒ ์ฒ๋ผ ๋์๊ฒ ์ํ์ ๋จ์ ๋๋ผ ์ด์ผ๊ธฐ์ด๊ธฐ ๋๋ฌธ์ ์ต์ํ์ง ์์๋ค.
์ผ์ฑ SW Expert Academy์์ ๋ ผ๋ฆฌ์ ์ฌ๊ณ , Computational Thinking์ ๋ํ ๊ต์ก ์์์ ์ฐธ๊ณ ํด ๋ ผ๋ฆฌ์ ์ถ๋ก ์ ๋ํด ์กฐ๊ธ์ด๋๋ง ๊ณต๋ถํ ์ ์์๋ค.
X์ K
ํด๋น ๋ฌธ์ ๋ ์์ฐ์ 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
์ด๋ค.
- ๋ํ,
์ฝ๋
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() ๋ฉ์๋๊ฐ ์ด๋ค ์ฉ๋์ธ์ง, ์ ์ด๋ ๊ฒ ์ฝ๋๊ฐ ๊ตฌ์ฑ ๋์๋์ง ๊น๊ฒ ์ดํดํ ์ ์์๋ ์๊ฐ์ด์๋ค.
์์ง ๊ฐ์ผ ํ ๊ธธ์ด ๋ฉ์ง๋ง ํ๋์ฉ ๋ฐฐ์์ ๋ด ๊ฒ์ด ๋๋ ์ด ๊ณผ์ ์ด ์ฐธ ์ฌ๋ฏธ์๋ค.
์ฌ๋ฏธ์๋ ๋งํผ ์ ํ ์ ์๋๋ก ๋ ๋
ธ๋ ฅ ํด์ผ๊ฒ ๋ค!
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Cos Pro 1๊ธ | ๋ฌธ์์ด ํฉ์ฑํ๊ธฐ, ์์ ํ์ (0) | 2020.12.10 |
---|---|
Cos Pro 1๊ธ | ๋๋ฅด์์์ฆ ์ (0) | 2020.12.10 |
๋ฐฑ์ค 1158 | Queue, ์์ธํธ์ค ๋ฌธ์ (0) | 2020.11.25 |
๋ฐฑ์ค 10816 | ์ซ์ ์นด๋ 2 (0) | 2020.11.07 |
ํ์ | ์์ฐจ ํ์, ์ด์ง ํ์, ๋ถํ ์ฐพ๊ธฐ (0) | 2020.11.07 |