Level2 210922 https://programmers.co.kr/learn/courses/30/lessons/42842
๋ฌธ์ ์ค๋ช
Leo๋ ์นดํซ์ ์ฌ๋ฌ ๊ฐ๋ค๊ฐ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ค์์๋ ๋
ธ๋์์ผ๋ก ์น ํด์ ธ ์๊ณ ํ
๋๋ฆฌ 1์ค์ ๊ฐ์์ผ๋ก ์น ํด์ ธ ์๋ ๊ฒฉ์ ๋ชจ์ ์นดํซ์ ๋ดค์ต๋๋ค.
Leo๋ ์ง์ผ๋ก ๋์์์ ์๊น ๋ณธ ์นดํซ์ ๋
ธ๋์๊ณผ ๊ฐ์์ผ๋ก ์์น ๋ ๊ฒฉ์์ ๊ฐ์๋ ๊ธฐ์ตํ์ง๋ง, ์ ์ฒด ์นดํซ์ ํฌ๊ธฐ๋ ๊ธฐ์ตํ์ง ๋ชปํ์ต๋๋ค.
Leo๊ฐ ๋ณธ ์นดํซ์์ ๊ฐ์ ๊ฒฉ์์ ์ brown, ๋
ธ๋์ ๊ฒฉ์์ ์ yellow๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ์นดํซ์ ๊ฐ๋ก, ์ธ๋ก ํฌ๊ธฐ๋ฅผ ์์๋๋ก ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ๊ฐ์ ๊ฒฉ์์ ์ brown์ 8 ์ด์ 5,000 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- ๋ ธ๋์ ๊ฒฉ์์ ์ yellow๋ 1 ์ด์ 2,000,000 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- ์นดํซ์ ๊ฐ๋ก ๊ธธ์ด๋ ์ธ๋ก ๊ธธ์ด์ ๊ฐ๊ฑฐ๋, ์ธ๋ก ๊ธธ์ด๋ณด๋ค ๊น๋๋ค.
์ ์ถ๋ ฅ ์
ย
My solution
์ฒ์์ DFS ํจ์๋ฅผ ์ฌ์ฉํ๋ ค๋ค๊ฐ for๋ฌธ์ผ๋ก 1๋ถํฐ yellow์ ์ ๊ณฑ๊ทผ๊น์ง ๋๋ฉด์ ์ฝ์๋ค์ ๊ฒ์ฌํด์ฃผ๋ฉด ๋๋ ๋ก์ง์ด๋ผ ์ฌ๊ท ํ๋ฒ ๋ด๋ ค๊ฐ๋ ๊ฒ ๋ฌด์๋ฏธํ ๊ฒ ๊ฐ์ for๋ฌธ๋ง์ผ๋ก ๋ฐ๊พธ์๋ค.
for๋ฌธ ๋ด์์๋ ์ฝ์์์ ๊ฒ์ฌํ๊ธฐ ์ํด ๋ชซ๊ณผ ๋๋จธ์ง๋ฅผ ๊ตฌํ๊ณ ์ดํ ์ฝ์๊ฐ ๋ง๋ค๋ฉด tmp์ ์ ์ฅํ์๋ค.
tmp์ ์ ์ฅํ yellow์ ์ฝ์๋ฅผ ํตํด (๊ฐ๋ก๊ฐ ๊ฐ๊ฑฐ๋ ๋ ๊ธธ๊ธฐ ๋๋ฌธ์) ๊ฐ๋ก, ์ธ๋ก๋ฅผ +2์ฉ ํด์ ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ๊ฐ๋ก์ ์ธ๋ก ๊ธธ์ด๋ ์ ์ฒด ํฌ๊ธฐ๋ฅผ ๊ตฌํ ์ ์๋ ๊ฐ์ด ๋์๋ค.
ย
์ฒ์์๋ 3๊ฐ์ ํ
์คํธ์ผ์ด์ค๋ฅผ ๋ณด๋ฉด์ ์๋์ ๊ฐ์ด (๊ฐ๋ก ์ฝ์ + ์ธ๋ก ์ฝ์)*2์ ๊ฐ์ ๋ชจ์๋ฆฌ 4๊ฐ๋ฅผ ๋ํด์ค ๊ฒ์ด brown์ด ๋๋ ๊ฒ์ด ์กฐ๊ฑด์ด๋ผ๊ณ ์๊ฐํ๋ค.
if (
ํ์ง๋ง ์ ํ์ฑ 69.2/100
ํ๋ฆด ๋งํ ์กฐ๊ฑด์ ์ ๊ฒ ๋ฟ์ด๋ผ ์๊ฐํ๋ค.
์ฐ์ ์ด์ํ ๊ฒ์ ์กฐ๊ฑด์์๋ ๋์ค์ง ์๋ ์ฐ์ฐ์ธ tmp[0]+2, tmp[1]+2๋ฅผ ํด์ผ ๊ทธ๊ฒ ๋ต์ด๋ผ๋ ๊ฒ์ด์๋ค.
์ด๊ฒ๋ง ํด๋ ์ฝ๊ฒ ์ ์ถํ ์ ์๋ค. ์กฐ๊ฑด์์๋ tmp[0]+2, tmp[1]+2์ธ ์ ์ฒด ์นดํซ์ ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ฒ์. ๊ทธ๋ ๋ค๋ฉด ์ ์ฒด ์นดํซ์ ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๊ฒ์ ์๋๋ ์ ์ฒด ์นดํซ์ ์ฌ์ด์ฆ๋ฅผ yellow, brown์ ๊ณฑํด ๊ตฌํ ์ ์๋ค๋ ์ฌ์ค์ ์์์ผ ํ๋ค. (์ฌ์ค ์ ์กฐ๊ฑด๋ ์ ํจํ ๊ฒ์ด์๋ค.)
ํ์ง๋ง ๋๊ฐ์ด ์ ํ์ฑ 69.2/100 ๊ฐ ๋์๋ค.
ย
๊ทธ ๋ค์์ ๋ต์ ๊ตฌํ์๋ง์ ๊ฐ์ ๋ฆฌํดํด์ฃผ๋ฉด์ ๋ฐ๋ณต๋ฌธ์ ๋น ์ ธ๋์์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์ฒ์์๋ ์ฑ๋ฅ ๋๋ฌธ์ธ๊ฐ ์ถ์ด์ ์์ ํ๋๋ฐ ์ ์ถํด๋ณด๋ 100์ ์ด ๋์จ๋ค.
๋ก์ง์ ์ฒ์ฒํ ์ดํด๋ณด๋ for๋ฌธ์ ๋๋ฉด์ remainder๊ฐ 0์ธ ๊ฒฝ์ฐ ์ฝ์์ ์กฐ๊ฑด์ ํด๋น๋๊ณ ๋ฐ๋ก tmp๊ฐ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ณํด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ ์ ์ํ๋ ์ฝ์๋ฅผ ์ฐพ์์ด๋ ๋ค์ ์ฝ์์ ์์ผ๋ก ๋ฎ์ด์์์ง ๊ฒ์ด์๋ค. 3๊ฐ์ ํ
์คํธ์ผ์ด์ค๋ก ํ๋ฉด์ ๊ฑฐ๊ธฐ์ ๋งค๋ชฐ๋์๋ ๊ฒ ๊ฐ๋ค. ์ ๋ต์ ์ฐพ์๋ง์ break๋ return์ ํ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์ด์์ผ๋ ์์ง ์์์ผ๊ฒ ๋ค๋ ์๊ฐ๋ ๋ค์๋ค.
ย
์์ค ์ฝ๋
function solution(brown, yellow) {
let answer = [];
let tmp = [];
for (let i = 1; i <= Math.sqrt(yellow); i++) {
let quotient = yellow / i;
let remainder = yellow % i;
if (remainder === 0) {
tmp[0] = Math.max(quotient, i);
tmp[1] = Math.min(quotient, i);
if ((tmp[0] + 2) * (tmp[1] + 2) === brown + yellow) {
//if (4 + (tmp[0] + tmp[1]) * 2 === brown) {
[tmp[0], tmp[1]] = [tmp[0] + 2, tmp[1] + 2];
break;
}
}
}
return (answer = tmp);
}
test("solution", () => {
// expect(solution(10, 2)).toStrictEqual([4, 3]);
// expect(solution(8, 1)).toStrictEqual([3, 3]);
expect(solution(24, 24)).toStrictEqual([8, 6]);
});
ย
ย