Algorithm Problem/JavaScript

[javascript] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ(2021 ์นด์นด์˜ค ์ฑ„์šฉ์—ฐ๊ณ„ํ˜• ์ธํ„ด์‹ญ)

deo2kim 2021. 8. 13. 21:40
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

  • ํ•œ ๋ฐฉ์•ˆ์˜ ๋ชจ๋“  P์— ๋Œ€ํ•˜์—ฌ ์ฐจ๋ก€๋กœ ์ฃผ๋ณ€์„ ํƒ์ƒ‰ํ–ˆ๋‹ค. ์•ฝ๊ฐ„ BFS ๋Š๋‚Œ๐Ÿค”
    • O๋ฅผ ๋งŒ๋‚˜๋ฉด ๊ณ„์†ํƒ์ƒ‰
    • P๋ฅผ ๋งŒ๋‚˜๋ฉด ๋ฉˆ์ถ˜๋‹ค. - ๊ฑฐ๋ฆฌ๋‘๊ธฐ ์ง€์ผœ์ง€์ง€ ์•Š์Œ
      • ํƒ์ƒ‰ ์ค‘ P์— ๋Œ€ํ•˜์—ฌ ๊ฑฐ๋ฆฌ๊ฐ€ 2๊ฐ€ ๋˜๋ฉด ๋” ์ด์ƒ ๊ทธ ์ง€์ ์—์„œ๋Š” ํƒ์ƒ‰์„ ๋ฉˆ์ถ˜๋‹ค.
      • ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํƒ์ƒ‰ ์ค‘ ๋‹ค๋ฅธ P๋ฅผ ๋งŒ๋‚ฌ๋‹ค๋Š” ๋ง์€ ๊ฑฐ๋ฆฌ๊ฐ€ 2 ์ดํ•˜์ด๊ธฐ ๋•Œ๋ฌธ์— ํƒˆ๋ฝ
    • X๋Š” ๋ฌด์‹œ

 

๐Ÿ’จ ํŒŒ์ด์ฌ์œผ๋กœ ํ’€๋˜ ๋Š๋‚Œ์œผ๋กœ ํ’€์—ˆ๋‹ค. break๋ฅผ ํ•œ๋ฒˆ์— ๊ฑธ์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‚˜...

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

 function solution(places) {
    var answer = [];
    var length = places[0].length;
    var dx = [-1, 1, 0, 0]  // ์ƒ ํ•˜ ์ขŒ ์šฐ
    var dy = [0, 0, -1, 1]

    for (var place of places) {
        var isRight = false;
        for (var i = 0; i < length; i++) {
            for (var j = 0; j < length; j++) {
                if (place[i][j] === 'P') {                  
                    // ํฌ๊ธฐ๊ฐ€ ๊ฐ™์€ ๋น„์–ด์žˆ๋Š” 2์ฐจ์› ๋ฐฐ์—ด
                    var placeDistance = Array.from(Array(length), () => new Array(length).fill(-1));
                    var stack = [[i, j]];
                    placeDistance[i][j] = 0;

                    while (stack.length > 0 && isRight === false) {
                        [cx, cy] = stack.pop();
                        if (placeDistance[cx][cy] == 2) continue; // ๊ฑฐ๋ฆฌ๊ฐ€ 2๋งŒํผ์˜ ๋นˆ ๊ณต๊ฐ„์ด๋ฏ€๋กœ ์ฒดํฌํ•  ํ•„์š” ์—†์Œ

                        for (let k = 0; k < dx.length; k++) {
                            var nx = cx + dx[k];
                            var ny = cy + dy[k];
                            if (nx >= 0 && nx < length && ny >= 0 && ny < length && placeDistance[nx][ny] == -1) {
                                if (place[nx][ny] === 'O') { // ๋นˆ ๊ณต๊ฐ„์ด๋ฉด ๊ฑฐ๋ฆฌ 1 ๋„ฃ๊ณ 
                                    placeDistance[nx][ny] = placeDistance[cx][cy] + 1;
                                    stack.push([nx, ny]);
                                } else if (place[nx][ny] === 'P') { // P๋ฅผ ๋งŒ๋‚˜๋ฉด ๊ฑฐ๋ฆฌ 2 ์ด๋‚ด์— ๋งŒ๋‚ฌ์œผ๋ฏ€๋กœ ๊ฑฐ๋ฆฌ๋‘๊ธฐ ์ง€์ผœ์ง€์ง€ ์•Š์Œ
                                    stack = [];
                                    isRight = true;
                                    break
                                }

                            }
                        }
                    }
                    if(isRight) break;
                }
                if(isRight) break;
            }
        }
        if (isRight) {
            answer.push(0);
        } else {
            answer.push(1);
        }
    }
    return answer;
}
console.log(solution([["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]]));

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

 

๋ฐ˜์‘ํ˜•