๐ฅ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/1074
๐ฅํ์ด
์ผ๋จ 2**N X 2**N ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์์ 2**N-1 * 2**N-1 ์ผ๋ก 4๊ฐ์ ์์ญ ์ค ์ด๋ค ์์ญ์ ์ํด์๋์ง ํ๋ณํ๋ฉด์ ์ฌ๊ท์ ์ผ๋ก ์ค์ฝํ๋ฅผ ๊ณ์ํด์ ์ขํ ๋๊ฐ๋ค. ์ขํ๋๊ฐ๋ฉด์ Skipํ ์์ญ์ ์ํด์๋ ๊ฐ์๋ฅผ ์ง์ํด์ answer์ ๋ํ์๋ค.
// 5๋ถ
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString();
//.split("\n");
let [N, r, c] = input.split(" ").map((n) => Number(n));
if(N===1){
if(r==0&&c==0){
console.log(0)
}else if(r==0&&c==1){
console.log(1)
}else if(r==1&&c==0){
console.log(2)
}else if(r==1&&c==1){
console.log(3)
}
return
}
let answer = 0;
let divider = 2 ** (N - 1);
r=r+1
c=c+1
// answer = 48 , 60,
// divider = 4 , 2, 1
// r/c =8/8 , 4/4 , 2/2
while (1) {
if (divider === 1) {
if (r === 1) {
if (c === 1) {
answer += 1;
} else {
answer += 2;
}
} else {
if (c === 1) {
answer += 3;
} else {
answer += 4;
}
}
break;
}
if (r<= divider) {
if (c<= divider) {
//1
} else {
// 2
answer += ((divider*divider) * 1);
c = c - divider;
}
} else {
if (c <= divider) {
//3
answer += ((divider*divider) * 2);
r = r - divider;
} else {
//4
answer += ((divider*divider) * 3);
r = r - divider;
c = c - divider;
}
}
divider = Math.floor(divider / 2);
}
console.log(answer-1);
'๐Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค[JS] > 1051๋ฒ ์ซ์ ์ ์ฌ๊ฐํ (0) | 2024.10.31 |
---|---|
๋ฐฑ์ค[JS] > 1021๋ฒ ํ์ ํ๋ ํ (0) | 2024.10.30 |
ํ๋ก๊ทธ๋๋จธ์ค[JS] > [PCCP ๊ธฐ์ถ๋ฌธ์ ] 2๋ฒ / ํผ์ฆ ๊ฒ์ ์ฑ๋ฆฐ์ง (1) | 2024.09.11 |
ํ๋ก๊ทธ๋๋จธ์ค[JS] > [PCCP ๊ธฐ์ถ๋ฌธ์ ] 3๋ฒ / ์ถฉ๋์ํ ์ฐพ๊ธฐ (0) | 2024.09.11 |
ํ๋ก๊ทธ๋๋จธ์ค[JS] > ๊ฑฐ์ค๋ฆ๋ (2) | 2024.09.06 |