programmers. Level1
javascript - [1차]비밀지도
코딩하는 둥아
2021. 11. 4. 22:24
728x90
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/17681
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
십진수 -> 이진수
var dec = 123;
var bin = dec.toString(2); // === "1111011"
이진수 -> 십진수
var bin = "1111011";
var dec = parseInt(bin, 2); // === "123"
알고보니 자바스크립트에 내장함수를 사용해 십진수와 이진수를 변환할 수 있었다!
알아두면 편할 것 같다!
내가 짠 코드
function solution(n, arr1, arr2) {
var arr1_binary = [];
var arr2_binary = [];
var answer = [];
for(let j=0 ; j<arr1.length ; j++) {
var temp1=[];
var temp2=[];
for(let i=0 ; i<n ; i++) {
if(arr1[j]===0) {
temp1.unshift(0);
} else {
temp1.unshift(arr1[j]%2);
arr1[j] = parseInt(arr1[j] / 2);
}
if(arr2[j]===0) {
temp2.unshift(0);
} else {
temp2.unshift(arr2[j]%2);
arr2[j] = parseInt(arr2[j] / 2);
}
}
arr1_binary.push(temp1);
arr2_binary.push(temp2);
}
for(let i=0 ; i<arr1_binary.length ; i++) {
var temp = []
for(let j=0 ; j<arr1_binary[i].length ; j++) {
if(arr1_binary[i][j] === 1 || arr2_binary[i][j] === 1) temp.push("#");
else temp.push(" ");
}
answer.push(temp.join(""));
}
return answer;
}
처음 for문을 통해 이진수로 일일이 변환해주고 빈 공간엔 0을 넣어주었다.
내장함수를 사용하면 편할뻔했다..!
그리고 두번쨰 for문에서 두 arr로부터 최종 암호를 구해 답을 구했다
좀 많이 비효율적이고 지저분한 코드이다..
제출 후 참고한 코드
function solution(n, arr1, arr2) {
var answer = [];
let c;
for(let i =0;i<n;i++){
c = (arr1[i]|arr2[i]).toString(2).replace(/1/g,"#").replace(/0/g," ");
while(c.length != n) {
c = " " + c;
}
answer.push(c);
}
return answer;
}
다양한 코드들이 있었지만 이 코드가 이해하기 쉽게 잘 정리된 것 같았다.
(arr1[i]|arr2[i]).toString(2) 을 통해 arr1과 arr2의 배열을 한번에 이진수로 정리하고, replace 함수를 사용해서 1은 #으로, 0은 공백으로 대체하였다.
그리고 사이즈만큼 결과에 공백을 더해주었다.
다음부터 같은 답을 내더라도 더 효율적인 코드를 짜려고 노력해야겠다.
toString!!! replace!!!
728x90