โ€ป ์ฃผ์˜! ๋ ˆ๋ฐธ 2 ์ค‘ ๊ฐœ์ธ์ ์ธ ๊ทน์•…์˜ ๋‚œ์ด๋„

๋„ˆ๋ฌด ํž˜๋“ค์–ด์„œ ๋‹ค๋ฅธ๋ถ„์˜ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€๋‹ค.
๊ฐœ์ธ์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์กฐ์ฐจ ๋ฒ…์ฐจ ๋‚ด ๋‚˜๋ฆ„์˜ ์ฃผ์„์„ ๋‹ฌ๊ณ  ๋ฌธ์ œ๋ฅผ ํŒŒํ—ค์ณ๋ณด์•˜์Œ

์ถœ์ฒ˜ : ISA(๋ฅ˜) ๋‹˜์˜ ๊ฐœ๋ฐœ๋ธ”๋กœ๊ทธ

๋ฌธ์ œ ์„ค๋ช…

๊ฐ ์นธ๋งˆ๋‹ค S, L, ๋˜๋Š” R๊ฐ€ ์จ์ ธ ์žˆ๋Š” ๊ฒฉ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ด ๊ฒฉ์ž์—์„œ ๋น›์„ ์˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฉ์ž์˜ ๊ฐ ์นธ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ดํ•œ ์„ฑ์งˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋น›์ด "S"๊ฐ€ ์จ์ง„ ์นธ์— ๋„๋‹ฌํ•œ ๊ฒฝ์šฐ, ์ง์ง„ํ•ฉ๋‹ˆ๋‹ค.
๋น›์ด "L"์ด ์จ์ง„ ์นธ์— ๋„๋‹ฌํ•œ ๊ฒฝ์šฐ, ์ขŒํšŒ์ „์„ ํ•ฉ๋‹ˆ๋‹ค.
๋น›์ด "R"์ด ์จ์ง„ ์นธ์— ๋„๋‹ฌํ•œ ๊ฒฝ์šฐ, ์šฐํšŒ์ „์„ ํ•ฉ๋‹ˆ๋‹ค.
๋น›์ด ๊ฒฉ์ž์˜ ๋์„ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ, ๋ฐ˜๋Œ€์ชฝ ๋์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋น›์ด 1ํ–‰์—์„œ ํ–‰์ด ์ค„์–ด๋“œ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•  ๊ฒฝ์šฐ, ๊ฐ™์€ ์—ด์˜ ๋ฐ˜๋Œ€์ชฝ ๋ ํ–‰์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ต๋‹ˆ๋‹ค.
๋‹น์‹ ์€ ์ด ๊ฒฉ์ž ๋‚ด์—์„œ ๋น›์ด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ ์‚ฌ์ดํด์ด ๋ช‡ ๊ฐœ ์žˆ๊ณ , ๊ฐ ์‚ฌ์ดํด์˜ ๊ธธ์ด๊ฐ€ ์–ผ๋งˆ์ธ์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๋กœ ์‚ฌ์ดํด์ด๋ž€, ๋น›์ด ์ด๋™ํ•˜๋Š” ์ˆœํ™˜ ๊ฒฝ๋กœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ๊ทธ๋ฆผ์€ ๊ฒฉ์ž ["SL","LR"]์—์„œ 1ํ–‰ 1์—ด์—์„œ 2ํ–‰ 1์—ด ๋ฐฉํ–ฅ์œผ๋กœ ๋น›์„ ์  ๊ฒฝ์šฐ, ํ•ด๋‹น ๋น›์ด ์ด๋™ํ•˜๋Š” ๊ฒฝ๋กœ ์‚ฌ์ดํด์„ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ฒฉ์ž์—๋Š” ๊ธธ์ด๊ฐ€ 16์ธ ์‚ฌ์ดํด 1๊ฐœ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ์‚ฌ์ดํด์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒฉ์ž์˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 1์ฐจ์› ๋ฌธ์ž์—ด ๋ฐฐ์—ด grid๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ๊ฒฉ์ž๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง€๋Š” ๋น›์˜ ๊ฒฝ๋กœ ์‚ฌ์ดํด์˜ ๋ชจ๋“  ๊ธธ์ด๋“ค์„ ๋ฐฐ์—ด์— ๋‹ด์•„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

๋‚˜์˜ ํ’€์ด

function solution(grid) {
    const result = []
    // ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐฉํ–ฅ์˜ ๊ธธ์„ ์ƒ์„ฑ
    const root = Array.from(Array(grid.length), () => Array.from(Array(grid[0].length), () => Array(4).fill(true)))
    
    // ์›€์ง์ผ ๋ฐฉํ–ฅ ์ƒ,ํ•˜,์ขŒ,์šฐ
    const pos = [[-1,0],[1,0],[0,-1],[0,1]]
    
    root.forEach((row,rowIdx) => {
        row.forEach((col,colIdx) => {
            col.forEach((item,idx) => {
                // ๋ชจ๋‘ ํ•œ๋ฒˆ์”ฉ ์‚ดํŽด๋ณด๋ฉฐ ํ•ด๋‹น ๊ฒฝ๋กœ๊ฐ€ ํƒ์ƒ‰๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์‹ธ์ดํด์„ ๊ตฌํ•ด ๋ช‡๋ฒˆ์„ ๋„๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ์ •๋‹ต ๋ฐฐ์—ด์— ์‚ฝ์ž… ( ์ดˆ๊ธฐ์— ๋ชจ๋“  ๋ฐฐ์—ด์— true ๋ฅผ ๋„ฃ์€ ์ด์œ  )
                if(item) {
                    result.push(CycleCount(rowIdx,colIdx,idx))
                }
            })
        })
    })
    // ๋ช‡๋ฒˆ์˜ ์‹ธ์ดํด์„ ๋Œ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
    function CycleCount(rowIdx,colIdx,idx) {
        let count = 0

        while(1) {
            // ํ˜„์žฌ์˜ ์ขŒํ‘œ๊ฐ’์ด ์ง€๋‚˜์™”๋˜ ์ž๋ฆฌ๋ผ๋ฉด ๋ฐ˜๋ณต์„ ๋ฉˆ์ถค
            if(!root[rowIdx][colIdx][idx]) break
            // ํ˜„์žฌ ์ขŒํ‘œ๋ฅผ ์ง€๋‚˜๊ฐ”๋‹ค๊ณ  ํ‘œ์‹œ
            root[rowIdx][colIdx][idx] = false
            count++
            
            // ํ˜„์žฌ ์ขŒํ‘œ์˜ ์œ„์น˜ ์ ์šฉ
            rowIdx+=pos[idx][0]
            colIdx+=pos[idx][1]
            
            // ์–‘ ๋์—์„œ ๋„˜์–ด๊ฐ”๋‹ค๋ฉด ๋ฐ˜๋Œ€ํŽธ ์ฒ˜์Œ ์ ์œผ๋กœ
            if(rowIdx < 0) rowIdx = root.length-1
            if(rowIdx >= root.length ) rowIdx = 0
            if(colIdx < 0) colIdx = root[0].length-1
            if(colIdx >= root[0].length) colIdx = 0
            
            // ์ฒ˜์Œ ์ƒ,ํ•˜,์ขŒ,์šฐ ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ํ˜น์€ ์˜ค๋ฅธ์ชฝ์ธ ๊ฒฝ์šฐ ๋‹ค์Œ ๋ฐฉํ–ฅ์„ ์„ ์–ธ
            if(grid[rowIdx][colIdx] === 'L') idx = [2,3,1,0][idx]
            if(grid[rowIdx][colIdx] === 'R') idx = [3,2,0,1][idx]
        }
        
        return count
    }
    return result.sort((a,b) => a-b)
}

์•Œ๊ฒŒ๋œ ์ 

Array.from(['te','st'], (item,idx) => console.log(item)) // return te     st

Array.from์œผ๋กœ ์†์‰ฝ๊ฒŒ 2,3 ์ฐจ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Array.forEach๋ฅผ ์—ฌ๋Ÿฌ๊ฒน์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ ์™„์ „ํƒ์ƒ‰์„ ํ•˜๋ฉด ๋งค์šฐ ํŽธ๋ฆฌํ•˜๋‹ค

profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€