โถ ๋ฌธ์ : https://programmers.co.kr/learn/courses/30/lessons/62048
โถ ์ฝ๋ :
function solution(w, h) {
const total = w * h;
const g = gcd(w, h); // g ์ฆ, ์ต๋๊ณต์ฝ์๋ ๋๊ฐ์ ์ผ๋ก ๋๋์์๋ ๋ฐ๋ณต๋๋ ์ฌ๊ฐํํํ๊ฐ ๋ฑ์ฅํ๋ ํ์์ด๋ค.
const miniSquare = w/g + h/g - 1; // ๊ฐ๊ฐ์ ์์ ์ฌ๊ฐํ์ ๊ฐ๋ก๋ฅผ g๋ก ๋๋๊ฐ๊ณผ ์ธ๋ก๋ฅผ g๋ก ๋๋๊ฐ์์ 1(์ค๋ณตํด์ ์๋ฅด๋ ์ฌ๊ฐํ)์ ๋บ ๊ฐ๋งํผ ์ฌ๊ฐํ์ ์ง์ด๋ค.
return total - (g * miniSquare);
}
function gcd(a,b){
if(b === 0){
return a;
}else{
return gcd(b, a % b);
}
}
โถ ๋ฌธ์ ํ์ด :
- ํด๋น ๋ฌธ์ ๋ '๋ฉ์ฉกํ ์ฌ๊ฐํ ํ์ด' ๋ฅผ ์ฐธ๊ณ ํ์ฌ ํ์ดํ์๋ค.
1. ์ ์ฒด ์ฌ๊ฐํ์์ ์๋ฆฌ๋ ์ฌ๊ฐํ์ ์๋ฅผ ์ธ์ด์ผ ํ๋ค. (์ด๋, ์ ์ฒด์ฌ๊ฐํ์ ์ง์ฌ๊ฐํ์ด๋ผ๋ ์ ์ ์กฐ๊ฑด์ด ๋ฌธ์ ์ ์๋ค.)
2. ์ ์ฒด ์ฌ๊ฐํ์์ ์๋ฆฌ๋ ์ฌ๊ฐํ(์๋ฆฌ๋ ์์ญ)์ ๋ฐ๋ณต๋๋ ํํ๋ฅผ ๊ฐ์ง๋๋ฐ, ์ด๋ ๋ฐ๋ณต๋๋ ํ์๋ GCD(์ต๋๊ณต์ฝ์) ๋ฒ ๋ฑ์ฅํ๋ค.
3. ์ถ๊ฐ์ ์ผ๋ก ์๋ฆฌ๋ ์์ญ์ ์์ ์ฌ๊ฐํ์ด ์ต๋๊ณต์ฝ์ ๋ฒ ๋ฑ์ฅํ๋ค๋ฉด ํ๋์ ์์ ์์ญ ์ฌ๊ฐํ ๋ด๋ถ์์ ์๋ฆฌ๋ ์ฌ๊ฐํ์ ๊ฐ์๋ ์ด๋ป๊ฒ ๊ตฌํ ๊น?
- ์์ ์ฌ๊ฐํ์ ํฌ๊ธฐ๋ (w // g) * (h // g) ์ด๋ค. ์ด๋ ๊ฐ๊ฐ์ ์ฌ๊ฐํ์ ๋ํด ๋๊ฐ์ ์ ๊ทธ์์๋ (์์ ์ฌ๊ฐํ์ ๊ฐ๋ก) ๊ฐ, (์์ ์ฌ๊ฐํ์ ์ธ๋ก) ๊ฐ ์ฉ ๋๋๋ค. ํ์ง๋ง ์ด๋ ๊ฐ๋ก์ ์ธ๋ก์ ๋ํด ์ค๋ณต์ผ๋ก ์นด์ดํ ํ๋ ์นธ(์ฒ์ ์์์นธ) ์ ๋ํ 1์ ๋นผ์ฃผ์ด์ผํ๋ค.
4. ์ง๊ธ ๊น์ง์ ๋ง์ ์ ๋ฆฌํด๋ณด๋ฉด ์ ์ฒด ์ฌ๊ฐํ์ ํฌ๊ธฐ (w * h) ์์ gcd(์์ ์ฌ๊ฐํ์ ๋ฑ์ฅ ํ์) * miniSquare(์์ ์ฌ๊ฐํ์์ ๋๊ฐ์ ์ ์ํด ์ ์ธ๋๋ ์ฌ๊ฐํ์ ์)๋ฅผ ๋นผ์ฃผ์ด์ผ ํ๊ณ miniSquare์ ์๋ "(w / g) + (h /g) - 1" ์ด ๋๋ค๋ ๊ฒ์ด๋ค.
5. ๋ฐ๋ผ์ ์ ์ฒด ์์ `(w * h) - gcd * (w/g + h/g - 1)` ์ด ๋์ด์ผ ํ๋ค๋ ์๋ฏธ์ด๋ค.
6. gcd() ํจ์๋ '์ ํด๋ฆฌ๋ ํธ์ ' ๋ฅผ ์ฐธ๊ณ ํด ๊ตฌํํ์์ผ๋ฉฐ ๊ฐ๊ฐ์ ์กฐํฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ ๋ฌธ์ ์๋ค.
'๐ฏ CodingTest > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] 124 ๋๋ผ์ ์ซ์ (0) | 2022.06.11 |
---|---|
[Programmers] (Javascript) ์์ ๊ฒ์ (2) | 2022.05.02 |
[Programmers] (Javascript) ๋ฉ๋ด ๋ฆฌ๋ด์ผ (0) | 2022.04.28 |
[Programmers] (Javascript) ์ถ์ ํธ๋ํฝ (0) | 2022.04.26 |
[Programmers] (Javascript) ํํ (0) | 2022.04.25 |