Jun 개발노트

프로그래머스 - 비밀지도해독

February 20, 2020

비밀지도

  1. 이해

    • 이진수 숫자로 변환 후 1일 하나라도 있는 곳은 벽 => ’#’, 없으면 => ’ ’
  2. 계획

    • 5*5배열을 만들어 이진수로 변환한 숫자를 넣어주자
    • 2차 배열에서 값을 하나씩 비교해서 하나라도 있으면 ’#’ 없으면 ’ ‘으로 해서 리턴하자
  3. 실행

    const transTwo = (n, arr1, arr2) => {
        const result = [];
        for (let i = 0; i < n; i++) {
            let shiftOP = (arr1[i] | arr2[i]).toString(2).split("");
            if (shiftOP.length !== n) {
                let lessNum = n - shiftOP.length;
                for (let i = 0; i < lessNum; i++) {
                    shiftOP.unshift("0");
                }
            }
            result.push(shiftOP.join(""));
        }
        return result;
    };
    const transWall = arr => {
        const wallArr = [];
        const result = [];
        for (let i of arr) {
            wallArr.push(i.split(""));
        }
        for (let i = 0; i < wallArr.length; i++) {
            for (let j = 0; j < wallArr[i].length; j++) {
                if (wallArr[i][j] === "1") {
                    wallArr[i][j] = "#";
                } else {
                    wallArr[i][j] = " ";
                }
            }
        }
        for (let i in wallArr) {
            result.push(wallArr[i].join(""));
        }
        return result;
    };
    const solution = (n, arr1, arr2) => {
        return transWall(transTwo(n, arr1, arr2));
    };
    
    describe("비밀지도 해독", () => {
        it("최종", () => {
            expect(solution(6, [46, 33, 33, 22, 31, 50], [27, 56, 19, 14, 14, 10])).toEqual([
                "######",
                "### #",
                "## ##",
                " #### ",
                " #####",
                "### # "
            ]);
        });
        it("이진수 변경해서 테이블에 넣기", () => {
            expect(transTwo(6, [46, 33, 33, 22, 31, 50], [27, 56, 19, 14, 14, 10])).toEqual([
                "11111",
                "10101",
                "11101",
                "10011",
                "11111"
            ]);
        });
        it("벽으로 바꾸기", () => {
            expect(transWall(["11111", "10101", "11101", "10011", "11111"])).toEqual([
                "#####",
                "# # #",
                "### #",
                "# ##",
                "#####"
            ]);
        });
    });
  4. 반성

    • 이진수를 만드는 방법에 대해서 toString(2, 8, 16) 공부하자
    • 이차배열을 만들어서 비교 하려고 했지만, 값을 이진수로 바꾸고 다시 넣어야 하는것에 대해 복잡도가 높아졌다.
    • 비트연산자를 활용하면 바로 2진수로 비교해서 나온다(조건 and, or, xor)
    • 작은 단위로 계속해서 짜르는 연습을 하자
    • 오늘도 input에 대한 제한조건, 다른 아큐먼트와이 공통점, 차별성에 대해서 연구하자

Written by Junho You 배운것을 기록하자