


ย 
ํ์ด๋ณด๊ธฐ
์ด์ฐจ์ ๋ฐฐ์ด์ด๋๊น 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;
}ย 
ย 
ย 
ย