์šฉ๊ฑด๋งŒ ๊ฐ„๋‹จํžˆ, ์›€์งค์€ ํ•œ ๋ฒˆ ๋” ์ƒ๊ฐ
๊ธˆ๋ณ‘์˜์— ์ƒ์˜ํ•˜์„ธ์š”
์•ผ์ƒ์˜ ์ด๋ฒคํŠธ๊ฐ€ ์—ด๋ ธ๋‹ค
์ฆ๊ฒจ์ฐพ๊ธฐ
์ตœ๊ทผ๋ฐฉ๋ฌธ

[C#/Codewars] Snail ํ›„๊ธฐ (4kyu)

๋„ํฌ์ธํ„ฐ์ต์…‰์…˜
22.12.02
ยท
์กฐํšŒ 509

๋งํฌ: https://www.codewars.com/kata/521c2db8ddc89b9b7a0000c1


 

Codewars์—์„œ 4๊ธ‰์ธ Snail๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ดค๋‹ค.

4๊ธ‰ ๋ฌธ์ œ ์ค‘ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ๋ฌธ์ œ์ด๋ฉฐ, ๋‚œ์ด๋„๋Š” 4๊ธ‰ ์ค‘ ๋‹ค์†Œ ์‰ฌ์šด ํŽธ์— ์†ํ•œ๋‹ค. (๋‹ค๋งŒ ํ•„์ž๋Š” ๊ฝค๋‚˜ ํž˜๊ฒน๊ฒŒ ํ’€์—ˆ๋‹ค.)


 

๋ฌธ์ œ ์„ค๋ช…:

ํฌ๊ธฐ ๋ถˆํŠน์ •์˜ n*n ์ด์ฐจ์› ๋ฐฐ์—ด์„ ๋ฐ›์œผ๋ฉด, ๊ทธ ๋ฐฐ์—ด์„ ๋งˆ์น˜ ๋‹ฌํŒฝ์ด ๊ป์งˆ์˜ ๋ชจ์–‘๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ํ›‘์œผ๋ฉฐ ์ผ์ž๋กœ ํŽด์ง„ ๋‹จ์ผ์ฐจ์›๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์งœ๋Š” ๋ฌธ์ œ์ด๋‹ค.


 

Q. int[][]๋Š” ์ด์ฐจ์› ๋ฐฐ์—ด์ด ์•„๋‹ˆ์ž–์Šด~

A.์—„๋ฐ€ํžˆ ๋”ฐ์ง€๋ฉด int[,] ์ด์ฐจ์› ๋ฐฐ์—ด์€ ์•„๋‹ˆ๋ผ์„œ .GetLength(1)๊ฐ™์€ ํ•จ์ˆ˜๋Š” ๋ชป์“ด๋‹ค. ๊ทธ ๋Œ€์‹ , ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด array[0].Length๋ฅผ ์“ฐ๋„๋ก ํ•˜์ž.

(array.Length ๋˜๋Š” array.GetLength(0)์€ ๋นˆ ๋ฐฐ์—ด์—์„œ๋„ 1์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.)


 

์˜ˆ์‹œ:

array = [[1,2,3],

        [4,5,6],

        [7,8,9]]

snail(array) #=> [1,2,3,6,9,8,7,4,5]

 

(codewars ์˜ˆ์‹œ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™”๋‹ค.)

๋ฐ‘์˜ ํ•ด๋ฒ•์„ ๋ณด๊ธฐ ์ „์— ํ•œ๋ฒˆ ํ’€์–ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค.


 

ํ•„์ž์˜ ์ ‘๊ทผ:

๋‹ฌํŒฝ์ด ๊ป์งˆ๊ณผ ๊ฐ™์ด ํ•œ ์…€์”ฉ ์ด๋™ํ•˜๋ฉด์„œ ์š”์†Œ๋ฅผ ํ›‘๋Š” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ง๊ด€์ ์œผ๋กœ ๋– ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ’€๊ณ  ๋‚˜์„œ ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ๋ณด๋ฉด ํ˜„ํƒ€+๊ฐํƒ„์ด ๋ณด๋‹ค ์„ธ๊ฒŒ ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ ๋ฐ”๋ž€๋‹ค.


 

direction = โ€˜Rโ€™;

pos = new int[] { 0, 0 };

int length = array[0].Length;

var snailed = new int[length * length];

var map = new bool[length, length];


 

charํ˜•์˜ direction์€ ์ „์—ญ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ–ˆ๋‹ค. ์‹œ์ž‘๊ณผ ๋™์‹œ์— ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฏ€๋กœ โ€˜Rโ€™๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.

pos ๋˜ํ•œ ์ „์—ญ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ–ˆ๋‹ค. ์‹œ์ž‘ ์œ„์น˜๋Š” ์™ผ์ชฝ ์œ„์ด๋ฏ€๋กœ { 0, 0 }์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.

int[] snailed๋Š” ๋ฐ˜ํ™˜๋  ๊ฐ’์„ ๋‹ด๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด์ด๋‹ค.

bool[length, length]์€ ์ด๋ฏธ ํ›‘์€ ์…€๋กœ ๋‹ค์‹œ ์ด๋™ํ•˜๋Š” ์ผ์ด ์—†๋„๋ก ๊ฒ€์‚ฌํ•˜๊ธฐ ์œ„ํ•ด ๋†“์€ ์žฅ์น˜์ด๋‹ค.


 

for (int i = 0; i < length * length; i++)

{
snailed[i] = array[pos[0]][pos[1]];

map[pos[0], pos[1]] = true;

if (!Movable(map, length))

Turn();

Move();

}

๊ฐ€์žฅ ์ค‘์š”ํ•œ for ๋ฐ˜๋ณต๋ฌธ. ๋ฐ˜๋ณต ํšŸ์ˆ˜๋Š” ๋‹น์—ฐํžˆ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— length * length์ด๋‹ค.

์ด์ œ return๋  ์šด๋ช…์ธ snailed์— ํ•˜๋‚˜ํ•˜๋‚˜ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋์ด๋‹ค.

array[][]์˜ ๊ฐ๊ฐ์˜ index์— pos[0](x์ขŒํ‘œ)์™€ pos[1](y์ขŒํ‘œ)๋ฅผ ๋„ฃ์–ด snailed์— ๋“ค์–ด๊ฐˆ ๊ฐ’์„ ์ง€์ •ํ•œ๋‹ค.

map[,]์˜ ๊ฐ’์„ ๋„ฃ์€ ๋ถ€๋ถ„์„ true๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉฐ, ๋ฃจํ”„๋ฅผ ํ•œ ๋ฒˆ ๋Œ ๋•Œ๋งˆ๋‹ค ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ์”ฉ ์ด๋™ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.


 

ํ•˜์ง€๋งŒ ๊ณ„์† ์˜ค๋ฅธ์ชฝ์œผ๋กœ๋งŒ ๊ฐ€๋‹ค๊ฐ€๋Š” ์šฐ๋ฆฌ ์•ž์—๋Š” IndexOutOfRangeException๋งŒ์ด ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค. ์ด์ œ ๋ฐฉ๋ฒ•์€ ์—†๋Š”๊ฑธ๊นŒ?

์•„๋‹ˆ๋‹ค, ํ˜ธ๋ž‘์ด ๊ตด์— ๋“ค์–ด๊ฐ€๋„ ์ •์‹ ๋งŒ ์ฐจ๋ฆฌ๋ฉด ์‚ด ์ˆ˜ ์žˆ๊ณ , ์ด์ฐจ์› ๋ฐฐ์—ด ์•ˆ์— ๋“ค์–ด๊ฐ€๋„ Border๋งŒ ์ž˜ ์„ค์ •ํ•˜๋ฉด ์‚ด ์ˆ˜ ์žˆ๋‹ค ํ–ˆ๋‹ค. ์ ์ ˆํ•œ ํƒ€์ด๋ฐ์— ๋ฐฉํ–ฅ์„ ํ‹€์–ด์ค˜๋ณด์ž.


 

bool Movable() ํ•จ์ˆ˜์—์„œ๋Š” ์•ž์œผ๋กœ ์ด๋™ํ•˜๋ฉด ์ด๋ฏธ ํ›‘์€ ์š”์†Œ์ธ์ง€, ๋‚ญ๋– ๋Ÿฌ์ง€์ธ์ง€, ์•„๋‹ˆ๋ฉด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์…€์ธ์ง€๋ฅผ ๋ถ€์šธ๊ฐ’์œผ๋กœ ์•Œ๋ ค์ค€๋‹ค.

public static bool Movable(bool[,] map, int length)

{
bool movable = true;

switch (direction)

{

case โ€˜Rโ€™ :

if (pos[1] + 1 == length ||

   map[pos[0], pos[1] + 1)

movable = false;

break;

โ€ฆ

}

return movable;

}

switch๋ฌธ์„ ์‚ฌ์šฉํ•ด ๊ฐ„๋‹จํžˆ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

direction์ด R์ธ ๊ฒฝ์šฐ ํ˜„์žฌ ์œ„์น˜์—์„œ ํ•œ ์นธ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ”์„ ๋•Œ length์™€ ๊ฐ™์€์ง€ ๋น„๊ตํ•ด์ค€๋‹ค. (์ „์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.)

๋˜ํ•œ, ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ map์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•œ ๊ณณ์˜ ๋ถ€์šธ ๊ฐ’์„ ์ฝ์–ด, true๋ฉด ์ด๋™ํ•  ์ˆ˜ ์—†๊ณ , false๋ฉด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

direction์ด โ€˜Dโ€™, โ€˜Lโ€™, โ€˜Uโ€™์ธ ๊ฒฝ์šฐ์—๋„ ๋™์ผํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.


 

์ด์ œ ํ•ด๋‹น ํ–‰์˜ ๋์— ๋‹ฌํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ ์ง€๋‚˜์˜จ ๋•…์„ ๋‹ค์‹œ ๋ฐŸ์„ ์œ„๊ธฐ์— ์ฒ˜ํ–ˆ์„ ๋•Œ, ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ์‚ฌ์ „์— ์•Œ ์ˆ˜ ์žˆ๋‹ค.


 

๊ทธ๋Ÿผ Movable()์ด false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด, ๋ฐฉํ–ฅ์„ ํ‹€์–ด์ค€ ๋’ค ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋ฉด ๋œ๋‹ค.

public static void Turn()

{

switch (direction)

{

case โ€˜Rโ€™ :

direction = โ€˜Dโ€™;

break;

โ€ฆ

}

}

public static void Move()

{

switch (direction)

{

case โ€˜Rโ€™ :

pos[1]++;

break;

โ€ฆ

}

}

์ด๋ ‡๊ฒŒ Turn()๊ณผ Move()ํ•จ์ˆ˜๋„ switch๋ฌธ์„ ์‚ฌ์šฉํ•ด ๊ฐ„๋‹จํžˆ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.


 

for๋ฃจํ”„๋ฅผ ๋น ์ ธ๋‚˜์˜จ ๋’ค, snailed๋ฐฐ์—ด์€ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชจ๋“  ์ค€๋น„๊ฐ€ ๋๋‚œ ์ƒํƒœ์ด๋‹ค.

์ด๋Œ€๋กœ ์ œ์ถœํ•˜๋ฉด ์‹คํ–‰ ์‹œ๊ฐ„์€ ์•ฝ 3์ดˆ์ •๋„ ๊ฑธ๋ฆฐ๋‹ค.


 

Solutions:

Solutions ์ฑ„๋„์—์„œ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

๋ฌผ๋ก  ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ํ•ด๊ฒฐํ•˜๋ฉด์„œ๋„ ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ •๋ง ์ค‘์š”ํ•˜๋‹ค. (์‚ฌ์‹ค์ƒ Codewars๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ โ€ฆ)


 

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด์™€ ์ž์‹ ์˜ ํ’€์ด๋ฅผ ๋น„๊ตํ•ด๋ณธ ๋’ค, ์ž์‹ ์˜ ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ์™€๋Š” ์ „ํ˜€ ๋‹ค๋ฅธ ์•„์ดํ 250 ์ €์„ธ์ƒ ํ’€์ด๋ฅผ ๋ณด๊ณ  ๊ฐํƒ„์„ ๊ธˆ์น˜ ๋ชปํ•œ ์‚ฌ๋žŒ๋“ค์ด ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ถ”์ฒœํ•  ์ˆ˜๋„ ์žˆ๋‹ค.


 

ํ’€์ด๊ฐ€ ๊ธฐ๋ง‰ํžˆ๊ฒŒ ์ฐธ์‹ ํ•˜๋ฉด Clever์ถ”๋ฅผ,

ํšจ์œจ์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ๋ชจ๋‘ ์žก์€ ์ž…์‚ฌ ํ…Œ์ŠคํŠธ ์ „์šฉ ์ฝ”๋“œ์—๋Š” Best Practices์ถ”๋ฅผ ๋ฐ•๋Š”๋‹ค.


 

Snail Kata์˜ ํ’€์ด ์ค‘ Best Practices์™€ Clever์„ ๋…์ ํ•œ dlcoe์˜ํ’€์ด๋ฅผ ํ•œ๋ฒˆ ๋ณด๋„๋ก ํ•˜์ž.


 

public static int[] Snail(int[][] array)    

{

        int l = array[0].Length;

        int[] sorted = new int[l * l];

        Snail(array, -1, 0, 1, 0, l, 0, sorted);

        return sorted;

    }

     

public static void Snail(int[][] array, int x, int y, int dx, int dy, int l, int i, int[] sorted)

{

        if (l == 0)

            return;

        for (int j = 0; j < l; j++)

        {

            x += dx;

            y += dy;

            sorted[i++] = array[y][x];

        }

        Snail(array, x, y, -dy, dx, dy == 0 ? l - 1 : l, i, sorted);

}


 

๋†€๋ž๊ฒŒ๋„ ์ด๊ฒŒ ์ฝ”๋“œ์˜ ์ „๋ถ€์ด๋‹ค.

ํ•œ ์ค„ ํ•œ ์ค„ ๋œฏ์–ด๋ณด๋ฉด,

๋จผ์ € array์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•œ ํ›„, ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๋ฐฐ์—ด์˜ ํฌ๊ธฐ์— ๋งž๋Š” int[]๋ฅผ ์„ ์–ธํ•œ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€๋Š” ๋˜‘๊ฐ™์ง€๋งŒ, recursive๋ฅผ ์‚ฌ์šฉํ•ด ์•„์ฃผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ’€์–ด๋ƒˆ๋‹ค.

 

(์—ฌ๊ธฐ์„œ ์ž ๊น!) Recursive๋ž€?

์žฌ๊ท€ํ•จ์ˆ˜) $n!$ ($n$ ์˜ ๊ณ„์Šน) ๊ตฌํ•˜๊ธฐ - ์ฝ”๋”ฉ ์—ฐ์Šต

์žฌ๊ท€ ํ•จ์ˆ˜ ๋ผ๊ณ ๋„ ํ•˜๋Š”๋ฐ, ์œ„ ํŒฉํ† ๋ฆฌ์–ผ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด, ํ•จ์ˆ˜๊ฐ€ ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๋งํ•œ๋‹ค.

๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ ์—†์ง€๋งŒ ์•„๋ฌดํŠผ

 

Snail()ํ•จ์ˆ˜์— array์™€ int x, y(๊ฐ๊ฐ pos[0]๊ณผ pos[1]์— ์ƒ์‘ํ•œ๋‹ค.), ๊ทธ๋ฆฌ๊ณ  int dx, dy, ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” l๊ณผ sorted[]์˜ ์ธ๋ฑ์Šค ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” i, ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐฐ์—ด sorted๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

Snail()ํ•จ์ˆ˜์— ๋“ค์–ด์„œ๋ฉด if (l == 0) return;์„ ํ†ตํ•ด empty matrix๋ฅผ ์žก์•„๋‚ธ๋‹ค.

์ดํ›„ ,

for (int j = 0; j < l; j++) ์—์„œ๋Š” x += dx;์™€ y += dy;๋ฅผ ํ†ตํ•ด ํ•œ์นธ ํ•œ์นธ ์ด๋™ํ•˜๋ฉฐ sorted๋ฅผ ์ฑ„์šด๋‹ค.

์—ฌ๊ธฐ์—์„œ ์ „๋‹ฌ๋ฐ›์€ dx์™€ dy๋Š” ๊ฐ๊ฐ 1๊ณผ 0์œผ๋กœ, ์ฒ˜์Œ ์ด ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์„ ๋•Œ์—๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ๋งŒ ์›€์ง์ธ๋‹ค. ์ด ๋‹ค์Œ์ด ํ•ต์‹ฌ์ด๋‹ค.


 

Snail(array, x, y, -dy, dx, dy == 0 ? l - 1 : l, i, sorted);


 

์ด ์ฝ”๋“œ์˜ ์ฒœ์žฌ์„ฑ์„ ์—ฟ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค.

์ „๋‹ฌ๋ฐ›์•˜๋˜ dx์™€ dy๋ฅผ ์„œ๋กœ ๊ต์ฐจ์‹œ์ผœ dx์˜ ์ž๋ฆฌ์— -dy๋ฅผ, dy์˜ ์ž๋ฆฌ์— dx๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

๋‹ค์‹œ ํ•œ๋ฒˆ ํ˜ธ์ถœ๋œ Snailํ•จ์ˆ˜๋Š” ์ด๋ฒˆ์—” dx๊ฐ€ 0์ด๊ณ , dy๊ฐ€ -1์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ‘์œผ๋กœ๋งŒ ์›€์ง์ธ๋‹ค.

int l์€ for๋ฌธ์˜ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์ •ํ•˜๋Š”๋ฐ, dy == 0, ์ฆ‰, ์˜ค๋ฅธ์ชฝ ๋˜๋Š” ์™ผ์ชฝ์œผ๋กœ ์›€์ง์ด๋‹ค๊ฐ€ ์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด l - 1์„ ํ†ตํ•ด ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜๋ฉฐ ํ•„์ž์˜ ํ•ด๋ฒ•์˜ Movable()ํ•จ์ˆ˜๋ฅผ ๋Œ€์‹ ํ•œ๋‹ค. ์•„์ฃผ ๊ฐ„๋‹จํ•œ ์‚ผํ•ญ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž๋กœ ๋ง์ด๋‹ค.


 

์ด๋ ‡๊ฒŒ l == 0์ด ๋˜๋ฉด ์•„๊นŒ empty matrix๋ฅผ ๊ฑธ๋Ÿฌ๋ƒˆ๋˜ ์กฐ๊ฑด๋ฌธ์— ๊ฑธ๋ฆฌ๋ฉฐ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.

 

 

Snail Kata๋Š” 4๊ธ‰๋‚œ์ด๋„๊ฐ€ ์•„๋‹Œ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋‹ค๋ฅธ Kata์— ๋น„ํ•˜๋ฉด ๋น„๊ต์  ์‰ฝ๋‹ค. ์ง๊ด€์ ์ธ ํ•ด๋ฒ•์ด ์™€๋‹ฟ๊ณ , ๊ทธ ํ•ด๋ฒ•๋„ ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฌ์›Œ์„œ ๋‹ค์†Œ ์‰ฝ๊ฒŒ ๋А๊ปด์ง„๋‹ค.

https://www.codewars.com/kata/5c2fd9188e358f301f5f7a7b

Bird Mountain - the river๋„ 4๊ธ‰์ธ ๊ฒƒ์„ ๋ณด๋ฉด Snail์ด ํ™•์‹คํžˆ ์‰ฌ์šด ํŽธ์€ ๋งž๋‹ค. (๊ทผ๋ฐ ์ €๊ฑด ์ง„์‹ฌ ์™œ 3๊ธ‰์ด ์•„๋‹Œ์ง€ ๋ชจ๋ฅด๊ฒ ์Œ)

ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๊ณ  dlcoe๊ฐ€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์“ด ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ recursive๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„ํ–ˆ์„ ๋ฟ.


 

๊ฒฐ๋ก : ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์• ์šฉํ•ฉ์‹œ๋‹ค.

ํƒœ๊ทธ :
#Codewars
#Kata
#4kyu
#์žฌ๊ท€ํ•จ์ˆ˜
๋Œ“๊ธ€
์•„์žฌ๋งจ
22.12.02
๋ธ”๋กœ๊ทธ ๊ฐ™์€๋ฐ ๋จผ์ € ์“ฐ๊ณ  ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜์…จ๋‚˜์š”? ๋‹คํฌ๋ชจ๋“œ์—์„  ๊ธ€์ž ์ƒ‰์ด ๊ฒ€์€์ƒ‰์œผ๋กœ ๋‚˜์˜ค๋„ค์š”
๋„ํฌ์ธํ„ฐ์ต์…‰์…˜ ๊ธ€์“ด์ด
22.12.02
๊ตฌ๊ธ€ ๋…์Šค์—์„œ ์˜ฎ๊ฒผ๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‚˜๋ณด๊ตฐ์š”
๋ฏธํ‚ค๋งˆ์šฐ์Šค์ญˆํŽ„
22.12.02
๊ฒ€์€ ๋ฐ”ํƒ• ๊ฒ€์€์ƒ‰ ๊ธ€์ž๋ผ ๋ˆˆ์•„ํŒŒ์šฉ
ABCJ
22.12.02
๋‚˜๋Š” ํฐ ๋ฐ”ํƒ• ์จ์„œ ์ž˜ ๋ณด์ด์ž–์Šด~
์šฐ์™€์™€์•™
22.12.02
๋‹ต ์•ˆ๋ณด๊ณ  ๋Œ€์ถฉ ์ƒ๊ฐํ•ด ๋ณด๋ฉด
def result(array):
if len(array) >1:
return array[0] + result(rotate(array[1:]))
else:
return array[0]
์ด๋ ‡๊ฒŒ ํ•ด ๋†“๊ณ  ๋ฐฐ์—ด์„ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „์‹œํ‚ค๋Š” rotate()ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๋ฉด ๋˜๊ฒ ๋„ค. ์ˆ˜ํ•™ ์‚ฌ์šฉํ•ด์„œ ๋ฐฐ์—ด ํšŒ์ „์‹œํ‚ค๋Š” ๊ฐ„๋‹จํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ.
์ œ๋ฐœ์Šค๋งˆํŠธํฌ์ธํ„ฐ์จ์ค˜
22.12.02
์žฌ๊ท€ํ•จ์ˆ˜... ์ €๋Š” ์ฝœ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋‚  ์ƒํ™ฉ์ด ์ƒ๊ธธ์ง€ ์•ˆ์ƒ๊ธธ์ง€ ๋งค๋ฒˆ ๊ณ ๋ฏผํ•˜๋Š”๊ฒŒ ํž˜๋“ค์–ด์„œ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์›ฌ๋งŒํ•˜๋ฉด ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ•ด์š”. ์ด ๊ฒฝ์šฐ๋Š” ํฐ ์ธํ’‹๊ฐ’์ด ๋“ค์–ด์˜ค์ง€๋Š” ์•Š๋Š” ์ƒํ™ฉ์ธ๊ฐ€๋ณด๋„ค์š”. ๊ทธ๋‚˜์ €๋‚˜ dlcoe ์ด๋ถ„ ์ฝ”๋“œ ์ง„์งœ ๊น”๋”ํ•˜๋„ค์š”

๐Ÿš€๊ถค๋„์‚ฌ๋ น๋ถ€(๊ถค๋„) ์ „์ฒด๊ธ€

์‚ฌ๋ น๋ถ€ ์—ฌ๋Ÿฌ๋ถ„ ๊ฐ€์‹œ๊ธฐ ์ „์— ์ด๊ฑฐ ํ•˜๋‚˜๋งŒ ์•Œ๋ ค์ฃผ์„ธ์š” 1
๊ถค๋„
๊ฒŒ์‹œํŒ
ยท
์กฐํšŒ์ˆ˜ 4025
ยท
24.03.18
์ด ๊ฒŒ์‹œํŒ์€ ๊ณง ์ด๋ฒคํŠธํ˜ธ๋ผ์ด์ฆŒ์œผ๋กœ?
๊ถค๋„
์„ฑ์ด๋ฆ„
ยท
์กฐํšŒ์ˆ˜ 1344
ยท
24.03.18
(์ดˆ์ดˆ์Šค์••) ๊ถค๋„์‚ฌ๋ น๋ถ€์— ์˜์•„ ์˜ฌ๋ฆฌ๋Š” ๋งˆ์ง€๋ง‰ ๋ถˆ๊ฝƒ: ์งคํ„ธ 3
๊ถค๋„
๋ฐฐ์ถ”์‚ด๋•๋ฌด๋„์‚ฌ
ยท
์กฐํšŒ์ˆ˜ 1570
ยท
24.03.17
๋งˆ์ง€๋ง‰ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 1
๊ถค๋„
์ •์‚ฌ๋ฏผ์ˆ˜
ยท
์กฐํšŒ์ˆ˜ 1539
ยท
24.03.17
ํ…Œ์ด์ €๊ฑด 1
๊ถค๋„
ํœด์ง€ํ†ต
ยท
์กฐํšŒ์ˆ˜ 498
ยท
24.03.17
์šฐ์ฃผ ๊ด€๋ จ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ง์ƒ์—์„œ ์˜๋ฌธ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 1
์งˆ๋ฌธ
๋งˆ์•ฝ์ƒ
ยท
์กฐํšŒ์ˆ˜ 700
ยท
24.03.17
ํ˜น์‹œ๋‚˜ ๊ธธ์„ ์žƒ์–ด๋ฒ„๋ฆฐ ๋‹น์‹ ๊ป˜ 100
๊ถค๋„
๊ถค๋„
ยท
์กฐํšŒ์ˆ˜ 18893
ยท
24.03.17
์Šคํฌ์ฃผ์˜) ํ‚ค๋ง๊ณผ ํ•จ๊ป˜ ํŒŒ๋ฌ˜ ๋ณด๊ณ ์™”์Šต๋‹ˆ๋‹ค 9
๊ถค๋„
์•ผ์ด์‹ ์งฑ๊ตฌ์•ผ
ยท
์กฐํšŒ์ˆ˜ 1327
ยท
24.03.16
๊ถค๋„๋ฏผ์ˆ˜ vs ์• ๊ตฝ๋ฏผ์ˆ˜ 3
๊ถค๋„
๋‚ด์นœ๊ตฌ๋ผ์ด์นด
ยท
์กฐํšŒ์ˆ˜ 884
ยท
24.03.16
๊ถค๋„๋‹˜ ํƒœ๋ธ”๋ › ๋ฐ”๊พธ์‹ ๊ฑฐ๊ฐ™๋„ค์š”?? 4
๊ถค๋„
์• ๊ตฝ๊ถค๋„
ยท
์กฐํšŒ์ˆ˜ 1027
ยท
24.03.15
์•ˆ๋ ๊ณผํ•™(ํ•ญ์„ฑ๋‹˜)๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ์Šคํƒ€์‰ฝ3์ฐจ ์ค‘๊ณ„์˜์ƒ(ํŽธ์ง‘๋ณธ)
๊ถค๋„
๋ฌด๋กœ๋Œ์•„๊ฐ
ยท
์กฐํšŒ์ˆ˜ 416
ยท
24.03.15
๊ถค๋„๋‹˜ ๋ชฉ๊ฒฉ ์ฐ 4
๊ถค๋„
์ •์‚ฌ๋ฏผ์ˆ˜
ยท
์กฐํšŒ์ˆ˜ 936
ยท
24.03.15
๊ฐ€์„ค๋„ ๊ณผํ•™๊ณ„์—์„œ ์ฃผ๋ฅ˜์ด๋ก ์ด๋ผ๊ณ  ๋งํ• ์ˆ˜ ์žˆ๋‚˜์š”? 4
์งˆ๋ฌธ
kjnnn0
ยท
์กฐํšŒ์ˆ˜ 646
ยท
24.03.15
์Œ๋‘ฅ์ด ์—ญ์„ค ์ดํ•ด๊ฐ€ ์•ˆ๋ผ์š” ๋„์™€์ฃผ์„ธ์š” 2
์งˆ๋ฌธ
์ดํ˜ธ์‚ฌ๋งˆ์˜
ยท
์กฐํšŒ์ˆ˜ 722
ยท
24.03.15
์•ˆ๋ ๊ณผํ•™๊ณผ ํ•จ๊ป˜ํ•˜๋Š” '์Šคํƒ€์‰ฝ' 3์ฐจ ๋ฐœ์‚ฌ ์ƒ์ค‘๊ณ„ 2
์ •๋ณด
๋ฌด๋กœ๋Œ์•„๊ฐ
ยท
์กฐํšŒ์ˆ˜ 708
ยท
24.03.14
๊ถค๋„๋‹˜ ์†Œ์‹ ์ด์ œ ์–ด๋””์„œ๋“ฃ์ฃ  9
๊ถค๋„
๊ถค์คŒ๋งˆ
ยท
์กฐํšŒ์ˆ˜ 1757
ยท
24.03.14
์•„์ธ์Šˆํƒ€์ธ ์ƒ์ผ์นดํŽ˜ 4
๊ถค๋„
๋‚˜๋Š”์•ผ๋ฌผ๊ฐœ๋‹ค
ยท
์กฐํšŒ์ˆ˜ 1133
ยท
24.03.14
๋ฌดํ•œ๊ถค๋„ 1
๊ถค๋„
๋‚ด๋งˆ์Œ๊นŠ์€๊ณณ์˜๋„ˆ
ยท
์กฐํšŒ์ˆ˜ 530
ยท
24.03.14
์ฒด๋ฅด๋ฉœ๋กœ ์ •๋ฆฌ์™€ ๋ฐ”๋‘‘AI ๋ฏธ๋ž˜?
๊ถค๋„
์˜ค๋ชฉ์˜ค๋ชฉ
ยท
์กฐํšŒ์ˆ˜ 597
ยท
24.03.14
์ด๋ฒˆ ํŒ์—…์—์„œ 1
๊ถค๋„
Savemylife
ยท
์กฐํšŒ์ˆ˜ 461
ยท
24.03.14