프로그래머스 - 비밀지도해독
2020-02-20
비밀지도
-
이해
- 이진수 숫자로 변환 후 1일 하나라도 있는 곳은 벽 => '#', 없으면 => ' '
-
계획
- 5*5배열을 만들어 이진수로 변환한 숫자를 넣어주자
- 2차 배열에서 값을 하나씩 비교해서 하나라도 있으면 '#' 없으면 ' '으로 해서 리턴하자
-
실행
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([ "#####", "# # #", "### #", "# ##", "#####" ]); }); });
-
반성
- 이진수를 만드는 방법에 대해서 toString(2, 8, 16) 공부하자
- 이차배열을 만들어서 비교 하려고 했지만, 값을 이진수로 바꾸고 다시 넣어야 하는것에 대해 복잡도가 높아졌다.
- 비트연산자를 활용하면 바로 2진수로 비교해서 나온다(조건 and, or, xor)
- 작은 단위로 계속해서 짜르는 연습을 하자
- 오늘도 input에 대한 제한조건, 다른 아큐먼트와이 공통점, 차별성에 대해서 연구하자