ใŠ™๏ธ

ARR PS - making a snail

notion image
notion image
notion image
ย 

ํ’€์–ด๋ณด๊ธฐ

์ด์ฐจ์› ๋ฐฐ์—ด์ด๋‹ˆ๊นŒ for๋ฌธ 2๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
i=0๋ถ€ํ„ฐ 1๋ฒˆ์งธ ํ–‰์˜ ๋ฐฐ์—ด์„ ๊ฐ€์ ธ์˜จ๋‹ค์Œ ์ฐจ๋ก€๋Œ€๋กœ ์ฑ„์›Œ์ค€๋‹ค. ์ฒ˜์Œ์—๋Š” ๋ฐฐ์—ด์˜ ๊ธธ์ด๋งŒํผ ์ฑ„์šด๋‹ค.
1 2 3
8 9 4
7 6 5
๊ทธ ๋‹ค์Œ์€ ๋ฐฉํ–ฅ์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋Œ๋ ค์„œ 2๋ฒˆ ์ฑ„์›Œ์ค€๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ๋ฐฉํ–ฅ์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋Œ๋ ค์„œ 2๋ฒˆ ์ฑ„์›Œ์ค€๋‹ค.
๋ฐฉํ–ฅ์„ ๋Œ๋ฆฌ๊ณ  1๋ฒˆ ์ฑ„์›Œ์ค€๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋ฐฉํ–ฅ์„ ๋Œ๋ฆฌ๊ณ  1๋ฒˆ ์ฑ„์šฐ๋ฉด ๋๋‚œ๋‹ค.
๋ช‡๋ฒˆ ์ฑ„์šธ์ง€๋Š” ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๊ฒ ๋Š”๋ฐ ๋ฐฉํ–ฅ์„ ํ‹€์–ด์„œ ์ธ๋ฑ์Šค๋ฅผ ์žก์•„์ฃผ๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์žก์•„์•ผํ• ์ง€ ์ƒ๊ฐํ•ด๋‚ด๋Š” ๊ฒƒ์ด ๊ด€๊ฑด์ธ ๊ฒƒ ๊ฐ™๋‹ค.
์ฒ˜์Œ์—๋Š” ์ฒซ ํ–‰์˜ ๋ฐฐ์—ด์ด์—ˆ๋Š”๋ฐ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋งŒํผ ์ฑ„์šฐ๊ณ  ๋‚˜๋‹ˆ๊นŒ ๋ฐฉํ–ฅ์„ ํ‹€์–ด์„œ ์„ธ๋กœ๋กœ ์ฑ„์›Œ์ค˜์•ผํ•œ๋‹ค.
i๊ฐ€ ํ–‰์ด๋ผ๋ฉด 0์œผ๋กœ ๊ณ ์ •๋œ ์ƒํƒœ์—์„œ ๊ทธ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์ธ j๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ๋‹ค ์ฑ„์› ์„ ๋•Œ ๊ทธ๋•Œ์˜ j๊ฐ’์€ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์„ ๊ฒƒ์ด๊ณ  i๋งŒ (๋ฐฐ์—ด์˜ ๊ธธ์ด - 1)๋งŒํผ ์ฑ„์šฐ๋ฉด์„œ ์ด๋™ํ•œ๋‹ค.
์ด๋•Œ ๋‹ค์‹œ ๋ฐฉํ–ฅ์„ ๋Œ๋ ค์ค˜์•ผ ํ•˜๋Š”๋ฐ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋˜ j๋ฅผ ๋‹ค์‹œ (๋ฐฐ์—ด์˜ ๊ธธ์ด - 1)๋งŒํผ ์ฑ„์šฐ๋ฉด์„œ ์ด๋™ํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋˜ i๋ฅผ (๋ฐฐ์—ด์˜ ๊ธธ์ด - 2)๋งŒํผ ์ฑ„์šฐ๋ฉด์„œ ์ด๋™ํ•œ๋‹ค. i=1, j=0
์ด๋ฒˆ์—๋Š” 0์ธ j๋ฅผ (๋ฐฐ์—ด์˜ ๊ธธ์ด - 2)๋งŒํผ ์ฑ„์šฐ๋ฉด์„œ ์ด๋™ํ•˜๋ฉด i=1, j=1์ด ๋˜๊ณ  ์ด๋™๊ฑฐ๋ฆฌ๊ฐ€ 1๋ณด๋‹ค ์ž‘์•„์งˆ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ข…๋ฃŒ๋œ๋‹ค.
ย 
๋ฐฉํ–ฅ์— ๋”ฐ๋ฅธ ์ธ๋ฑ์Šค๋ฅผ ์žก์•„์ฃผ๊ธฐ ์œ„ํ•ด์„œ dir๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋‘๊ณ  ์ง์ˆ˜๋ฒˆ 1์”ฉ ๋”ํ•ด์ฃผ๊ณ  ๋‹ค์‹œ ์ง์ˆ˜๋ฒˆ -1์”ฉ ๋”ํ•ด์ค€๋‹ค.
๋งจ ์ฒ˜์Œ์—๋Š” ๋ฐฐ์—ด์˜ ๊ธธ์ด๋กœ ์—ฐ์‚ฐํ•˜๋‹ˆ๊นŒ for๋ฌธ ๋‹ค์Œ์— lengthโ€”;๋ฅผ ๋‘๊ณ  ์ฑ„์šฐ๋Š” ๊ฐœ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์ค€๋‹ค. ๋ฐฐ์—ด์˜ ๊ธธ์ด๋งŒํผ ์ฑ„์›Œ์ฃผ๋ฏ€๋กœ ๋ฐฐ์—ด์˜ ๊ธธ์ด ์ž์ฒด๋ฅผ ๊ณ„์† ๋นผ๋ฉด์„œ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” ํ•œ๋ฒˆ ๋’ค๋ถ€ํ„ฐ ์—…๋ฐ์ดํŠธ, dir(๋ฐฉํ–ฅ)์€ ์ง์ˆ˜๋ฒˆ์งธ๋งˆ๋‹ค ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋œ๋‹ค.
function answer(length) {
    let result = [...Array(length)].map(() => []);
    console.log(result);
    let value = 1;
    let dir = 1;
    let x = -1,
        y = 0;
    while (1) {
        for (let i = 0; i < length; i++) {
            x += dir;
            result[y][x] = value++;
        }
        length--;
        for (let j = 0; j < length; j++) {
            y += dir;
            result[y][x] = value++;
        }
        if (!length) break;
        dir *= -1;
    }
    return result;
}
ย 
ย 
ย 
ย