[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. 숫자 문자열과 영단어

programmers

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. 소수 만들기

programmers

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진법 뒤집기

programmers

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. 신규 아이디 추천

programmers

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, } 이 둘이 다르다. 전자가 맞다! 후자는 인식이 안된다