The Bomberman Game

sun202x·2022년 8월 8일
0

알고리즘

목록 보기
5/49

사이트: HackerRank
난이도: 미디움

문제

bomberman은 아래 규칙대로 움직인다.
1. 초기 위치에 폭탄을 심는다.
2. 1 초 후는 동작하지 않는다.
3. 그 다음 1 초 후는 빈 곳 모든 cell에 폭탄을 심는다.
4. 그 다음 1 초 후는 3초 전 심었던 폭탄이 터진다.
5. 3, 4번 과정을 반복한다.

폭탄은 상하좌우로 한칸씩 터지며 옆에 폭탄이 있을 경우 제거 된다.

처음 폭탄이 터진 패턴과 그 다음 폭탄이 터진 후의 패턴이 계속 반복되므로 입력 받은 n을 계산하여 적절하게 패턴을 반환한다.

1. 나의 풀이

function bomberMan(n, grid) {
    // Write your code here
    if (n === 1) {
        return grid;
    }

    if (n % 2 === 0) {
        return grid.map(r => Array.from(r).map(c => "O").join(""));
    }

    function getBombed(g) {
        let result = [];
        
        function setResult(c, r, v) {
            if (!result[r]) {
                result[r] = [];
            }

            result[r][c] = v;
        };

        for (let i = 0; i < g.length; i++) {
            for (let j = 0;  j < g[i].length; j++) {
                if (g[i][j] === ".") {
                    if (result[i] && result[i][j] === ".") {
                        continue;
                    }
                    setResult(j, i, "O");

                } else {
                    setResult(j, i, ".");
                    if (i - 1 > -1 && g[i - 1][j] !== "O") {
                        setResult(j, i - 1, ".");
                    }
                    if (i + 1 < g.length && g[i + 1][j] !== "O") {
                        setResult(j, i + 1, ".");
                    }
                    if (j - 1 > -1 && g[i][j - 1] !== "O") {
                        setResult(j - 1, i, ".");
                    }
                    if (j + 1 < g[i].length&& g[i][j + 1] !== "O") {
                        setResult(j + 1, i, ".");
                    }
                }
            }
        }

        return result.map(r => r.reduce((ret, c) => ret += c, ""));
    }
    
    let bombCount = Math.floor(n / 2);
    
    if (bombCount % 2 === 1) {
        return getBombed(grid);
    } else {
        return getBombed(getBombed(grid));
    }
}

2. 다른사람의 풀이

바로 풀 수 있었던 문제들은 지금은 생략하고 추후 더 효율적인 문제 풀이법을 찾아보도록 하겠다.

(댓글로 알려주시면 정말 감사하겠습니다 ㅠㅠ)

profile
긍정적으로 살고 싶은 개발자

0개의 댓글