티스토리 뷰

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

'programmers. Level1' 카테고리의 다른 글

javascript - 3진법 뒤집기  (0) 2021.11.03
javascript - 폰켓몬  (0) 2021.11.03
javascript - 모의고사  (0) 2021.11.01
javascript - 소수 만들기  (0) 2021.10.28
javascript - 예산  (0) 2021.10.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함