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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
//비밀지도
//지도는 한 변의 길이가 n이다.
//각 칸은 공백(" ")이나 "#"으로 이루어져 있다.
//전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다.
//둘 개의 지도중에 하나의 지도만 벽이라도 벽으로 된다. 둘다 공백인 부분은 공백이다.
//지도 1과 지도 2는 정수 배열로 암호화 되어 있다. 0과1로 되어있다.
//암호화된 배열은 짇의 각 가로줄에서 벽부분을 1, 공백 부분을 0 으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다.
function solution(n, arr1, arr2) {
var answer = [];
let arr1_2 = arr1.map(element => element.toString(2)); //지도1를 2진수로 변환한다.
let arr2_2 = arr2.map(element => element.toString(2)); //지도2를 2진수로 변환한다.
let long = n; //가장 긴길이를 담을 그릇
for(let i=0;i<arr1_2.length;i++){ //길이를 맞춰준다.
if(long>arr2_2[i].length){
arr2_2[i] = Array(long-arr2_2[i].length).fill("0").join("")+arr2_2[i];
}
if(long>arr1_2[i].length){
arr1_2[i] = Array(long-arr1_2[i].length).fill("0").join("")+arr1_2[i];
}
}
for(let i=0;i<arr1_2.length;i++){
let word = "";
for(let j=0;j<arr1_2[i].length;j++){
if(arr1_2[i][j]==="1"||arr2_2[i][j]==="1"){
word+="#";
}
else{
word+=" ";
}
}
answer.push(word);
}
return answer;
}
|
cs |
간단한코드
1
2
3
4
5
6
7
8
9
|
function solution(n, arr1, arr2) {
//toString(2) 2진수로 바꾼다.
//replace(/1|0/g,element => +element ? "#" : " ") 1이면 "#"으로 아니면 " " 더한다.
return arr1.map((value,index)=>length_same(n,(value|arr2[index]).toString(2)).replace(/1|0/g,element => +element ? "#" : " "));
}
function length_same(n,word){
return "0".repeat(n-word.length)+word; //길이를 맞춰주는 함수,,
}
|
cs |
알게된것
NUM.toString(n) NUM을 n진수로 바꾼다.
정규표현식의 x|y를 사용하는법
replace(/x|y/g,element => +element ? "#" : " " 모든 문자열에 대해서 x이면 #으로 바꾸고 y이면 " "으로 바꾼다.
'알고리즘구현능력 > 문제해결능력' 카테고리의 다른 글
[javascript] 프로그래머스/1차 다트게임 (0) | 2019.11.28 |
---|---|
[javascript] 프로그래머스/실패율 (0) | 2019.11.27 |
[javascript] 프로그래머스/예산 (0) | 2019.11.26 |
[javascript] 프로그래머스/직사각형 별찍기 (0) | 2019.11.26 |
[javascript] 프로그래머스/x만큼 간격이 있는 n개의 숫자 (0) | 2019.11.26 |