Algorithm
- ์นด์ ๋ฌ๋ ฅ -
๋ฌธ์
์ต๊ทผ์ ICPC ํ์ฌ๋๋ ๋จ์๋ฉ๋ฆฌ์นด์ ์์นด ์ ๊ตญ์ด ๋๋ผ์ด ๋ฌธ๋ช ์ ์ง๋ ์นด์ ์ ๊ตญ์ ํ ๋๋ก ํ์ฌ ์ธ์์ก๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ๋ค. ์นด์ ์ ๊ตญ์ ๋ฐฑ์ฑ๋ค์ ํน์ดํ ๋ฌ๋ ฅ์ ์ฌ์ฉํ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์๋ค. ๊ทธ๋ค์ M๊ณผ N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋ ๊ฐ์ ์์ฐ์ x, y๋ฅผ ๊ฐ์ง๊ณ ๊ฐ ๋ ๋๋ฅผ <x:y>์ ๊ฐ์ ํ์์ผ๋ก ํํํ์๋ค. ๊ทธ๋ค์ ์ด ์ธ์์ ์์ด์ ํด๋นํ๋ ์ฒซ ๋ฒ์งธ ํด๋ฅผ <1:1>๋ก ํํํ๊ณ , ๋ ๋ฒ์งธ ํด๋ฅผ <2:2>๋ก ํํํ์๋ค. <x:y>์ ๋ค์ ํด๋ฅผ ํํํ ๊ฒ์ <x':y'>์ด๋ผ๊ณ ํ์. ๋ง์ผ x < M ์ด๋ฉด x' = x + 1์ด๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด x' = 1์ด๋ค. ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ง์ผ y < N์ด๋ฉด y' = y + 1์ด๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด y' = 1์ด๋ค. <M:N>์ ๊ทธ๋ค ๋ฌ๋ ฅ์ ๋ง์ง๋ง ํด๋ก์, ์ด ํด์ ์ธ์์ ์ข ๋ง์ด ๋๋ํ๋ค๋ ์์ธ์ด ์ ํด ์จ๋ค.
์๋ฅผ ๋ค์ด, M = 10 ์ด๊ณ N = 12๋ผ๊ณ ํ์. ์ฒซ ๋ฒ์งธ ํด๋ <1:1>๋ก ํํ๋๊ณ , 11๋ฒ์งธ ํด๋ <1:11>๋ก ํํ๋๋ค. <3:1>์ 13๋ฒ์งธ ํด๋ฅผ ๋ํ๋ด๊ณ , <10:12>๋ ๋ง์ง๋ง์ธ 60๋ฒ์งธ ํด๋ฅผ ๋ํ๋ธ๋ค.
๋ค ๊ฐ์ ์ ์ M, N, x์ y๊ฐ ์ฃผ์ด์ง ๋, <M:N>์ด ์นด์ ๋ฌ๋ ฅ์ ๋ง์ง๋ง ํด๋ผ๊ณ ํ๋ฉด <x:y>๋ ๋ช ๋ฒ์งธ ํด๋ฅผ ๋ํ๋ด๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
์ ์ถ๋ ฅ ์์
๋ฌธ์ ํ๊ธฐ
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on("line", function (line) {
input.push(line.toString());
}).on("close", function () {
for (let i = 1; i <= +input[0]; i++) {
let arr = input[i].split(" ");
let M = +arr[0],
N = +arr[1],
x = +arr[2],
y = +arr[3];
let lcm = (M * N) / gcd(M, N);
let n = 0;
let value = -1;
while (n * M < lcm) {
if ((n * M + x - y) % N === 0) {
value = n * M + x;
break;
}
n++;
}
console.log(value);
}
process.exit();
});
let gcd = (n1, n2) => {
return n2 ? gcd(n2, n1 % n2) : n1;
};
'๊ฐ์ธ๊ณต๋ถ > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค][Node.js] 6603๋ฒ : ๋ก๋ (0) | 2021.12.04 |
---|---|
[๋ฐฑ์ค][Node.js] 6359๋ฒ : ๋ง์ทจํ ์๋ฒ (0) | 2021.12.03 |
[๋ฐฑ์ค][Node.js] 5988๋ฒ : ํ์์ผ๊น ์ง์์ผ๊น (0) | 2021.12.01 |
[๋ฐฑ์ค][Node.js] 5717๋ฒ : ์๊ทผ์ด์ ์น๊ตฌ๋ค (0) | 2021.11.30 |
[๋ฐฑ์ค][Node.js] 5622๋ฒ : ๋ค์ด์ผ (0) | 2021.11.29 |
๋๊ธ