[Level1] 10. 46 ~ 50
하루 세문제씩 꾸준히 풀기! 였으나 문제가 너무 쉬워서 5개를 풀어보겠다😂
46. 비밀지도
function solution(n, arr1, arr2) {
let binary1 = [];
let binary2 = [];
for (let i = 0; i < n; i++) {
binary1[i] = arr1[i].toString(2);
binary2[i] = arr2[i].toString(2);
}
for (let i = 0; i < n; i++) {
if (binary1[i].length < n) {
binary1[i] = "0".repeat(n - binary1[i].length) + binary1[i];
}
if (binary2[i].length < n) {
binary2[i] = "0".repeat(n - binary2[i].length) + binary2[i];
}
//binary1[i].padStart(n, "0")
//binary2[i].padStart(n, "0")
}
let answer = [];
let temp = "";
for (let i = 0; i < n; i++) {
temp = "";
for (let j = 0; j < n; j++) {
if (binary1[i][j] == 0 && binary2[i][j] == 0) {
temp += " ";
} else temp += "#";
}
answer.push(temp);
}
return answer;
}
1단계인데 재미난 문제를 만났다!
js에 진법을 변환해주는 내장객체가 있는건 처음알았다
dec.toString(2)
parseInt(bin ,2)
str.repeat(num)
기억해두기!
best 풀이
function solution(n, arr1, arr2) {
return arr1.map((v, i) => addZero(n, (v | arr2[i]).toString(2)).replace(/1|0/g, a => +a ? '#' : ' '));
}
const addZero = (n, s) => {
return '0'.repeat(n - s.length) + s;
}
var solution=(n,a,b)=>a.map((a,i)=>(a|b[i]).toString(2).padStart(n,0).replace(/0/g,' ').replace(/1/g,'#'))
우와 도대체 내가 뭘본거지..
진짜 대단한 코드다…
a => +a
이게 뭘까? ++a도 아니고
알아봐야겠다!
47. 숫자 문자열과 영단어
function solution(s) {
s = s.replace(/zero/g, 0);
s = s.replace(/one/g, 1);
s = s.replace(/two/g, 2);
s = s.replace(/three/g, 3);
s = s.replace(/four/g, 4);
s = s.replace(/five/g, 5);
s = s.replace(/six/g, 6);
s = s.replace(/seven/g, 7);
s = s.replace(/eight/g, 8);
s = s.replace(/nine/g, 9);
return s / 1;
}
정규식 활용해보기!
best 풀이
function solution(s) {
let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
var answer = s;
for(let i=0; i< numbers.length; i++) {
let arr = answer.split(numbers[i]);
answer = arr.join(i);
}
return Number(answer);
}
48. 소수 만들기
function isPrime(num) {
for (let i = 2; i <= Math.sqrt(num); i++) {
if (num % i === 0) return false;
}
return true;
}
function solution(nums) {
let answer = 0;
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
for (let k = j + 1; k < nums.length; k++) {
let num = nums[i] + nums[j] + nums[k];
if (isPrime(num)) answer++;
}
}
}
return answer;
}
for문 3개 중첩은 너무 별로라서 다른 방법을 알고 싶었는데 없었다..ㅠㅠ
49. 3진법 뒤집기
function solution(n) {
let arr = [];
while (n >= 1) {
if (n === 1) {
arr.push(n);
break;
}
arr.push(n % 3);
n = parseInt(n / 3);
}
let len = arr.length;
return arr.reduce((prev, value, index) => {
return prev + (value * Math.pow(3, len - (index + 1)));
}, 0);
}
best 풀이
const solution = (n) => {
return parseInt([...n.toString(3)].reverse().join(""), 3);
}
와 이건 진짜 반칙이다…ㅠ
dec.toString(n) 이 2진법 말고 어느 숫자든 상관이 없구나
50. 신규 아이디 추천
function solution(new_id) {
let answer = new_id
.toLowerCase()
.replace(/[^\w-_.]/g, "")
.replace(/\.{2,}/g, ".")
.replace(/^\.|\.$/g, "")
.replace(/^$/, "a")
.slice(0, 15)
.replace(/\.$/g, "");
let len = answer.length;
return len <= 2 ? answer + answer.charAt(len - 1).repeat(3 - len) : answer;
}
정규식 활용하기!
이제는 정규식을 만나면 더이상 두렵지 않다!
빈 공백을 나타낼 때 /^$/
기억하기
갯수 나타내는 {2,}
, {2, }
이 둘이 다르다. 전자가 맞다! 후자는 인식이 안된다