์นดํŽซ carpet

๋ฌธ์ œ ์„ค๋ช…

Leo๋Š” ์นดํŽซ์„ ์‚ฌ๋Ÿฌ ๊ฐ”๋‹ค๊ฐ€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ค‘์•™์—๋Š” ๋…ธ๋ž€์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๊ณ  ํ…Œ๋‘๋ฆฌ 1์ค„์€ ๊ฐˆ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๋Š” ๊ฒฉ์ž ๋ชจ์–‘ ์นดํŽซ์„ ๋ดค์Šต๋‹ˆ๋‹ค.
notion image
Leo๋Š” ์ง‘์œผ๋กœ ๋Œ์•„์™€์„œ ์•„๊นŒ ๋ณธ ์นดํŽซ์˜ ๋…ธ๋ž€์ƒ‰๊ณผ ๊ฐˆ์ƒ‰์œผ๋กœ ์ƒ‰์น ๋œ ๊ฒฉ์ž์˜ ๊ฐœ์ˆ˜๋Š” ๊ธฐ์–ตํ–ˆ์ง€๋งŒ, ์ „์ฒด ์นดํŽซ์˜ ํฌ๊ธฐ๋Š” ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
Leo๊ฐ€ ๋ณธ ์นดํŽซ์—์„œ ๊ฐˆ์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ brown, ๋…ธ๋ž€์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ yellow๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์นดํŽซ์˜ ๊ฐ€๋กœ, ์„ธ๋กœ ํฌ๊ธฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ๊ฐˆ์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ brown์€ 8 ์ด์ƒ 5,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋…ธ๋ž€์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ yellow๋Š” 1 ์ด์ƒ 2,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ์นดํŽซ์˜ ๊ฐ€๋กœ ๊ธธ์ด๋Š” ์„ธ๋กœ ๊ธธ์ด์™€ ๊ฐ™๊ฑฐ๋‚˜, ์„ธ๋กœ ๊ธธ์ด๋ณด๋‹ค ๊น๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

brown
yellow
return
ย 

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]);
});
ย 
ย