[Level1] 6. 26 ~ 30




하루 세문제씩 꾸준히 풀기! 였으나 문제가 너무 쉬워서 5개를 풀어보겠다😂


26. 핸드폰 번호 가리기

프로그래머스

function solution(phone_number) {
  let answer = "";
  for (let i = 0; i < phone_number.length - 4; i++) {
    answer += "*";
  }
  for (let i = phone_number.length - 4; i < phone_number.length; i++) {
    answer += phone_number[i];
  }
  return answer;
}


이게 된다는건 아는데 더 효율적인게 있을 것 같은 느낌이다.
정규식을 알면 더 잘 풀수 있을거란 생각이 들었다.

다른 사람 풀이

var result = "*".repeat(s.length - 4) + s.slice(-4);

내가 생각하기에 가장 이상적이 코드같다!
가독성도 좋고 의미도 바로 보이고..완벽!
이런 코드를 구사할 수 있는 실력을 갖고싶다…ㅠㅠ

return s.replace(/\d(?=\d{4})/g, "*");


역시 정규식이 best 일 것 같았다!
주말에 정규식에 대해 자세히 공부해야겠다.!!!


27. 하샤드 수

programmers

function solution(x) {
  let str = x + "";
  let sum = 0;
  for (let i = 0; i < str.length; i++) {
    sum += parseInt(str[i]);
  }

  return x % sum ? false : true;
}


best 풀이

 return !(n % (n + "").split("").reduce((a, b) => +b + +a ));

split 이 있었구나..!
문자열을 배열로 바꾸는데는 split 도 있다는 것!
console.log("HELLO".split("")) //[ 'H', 'E', 'L', 'L', 'O' ]



28. 평균 구하기

programmers

function solution(arr) {
  return arr.reduce((current, value) => current+value, 0) / arr.length
}

나도 이번엔 누적합 reduce를 사용했다. 우하하!!
best 풀이와 정확히 일치한다!👍




29. 콜라츠 추측

programmers

function solution(num) {
  let cnt = 0;
  while (num !== 1) {
    num = num % 2 ? num * 3 + 1 : num / 2;
    cnt++;
    if (cnt >= 500) return -1;
  }
  return cnt;
}

while 활용해서 잘 했다고 생각했는데,,,best는 한줄이다…

best 풀이

function collatz(num,count = 0) {
    return num == 1 ? (count >= 500 ? -1 : count) : collatz(num % 2 == 0 ? num / 2 : num * 3 + 1,++count);
}

진짜 사람들 너무 대단하다.
재귀를 이렇게 사용했다.
재귀도 어서 익숙해졌으면 좋겠다.


30. 최대공약수와 최소공배수

programmers

function gcf(a, b) {
  if (a < b) {
    [a, b] = [b, a];
  }
  if (b === 0) {
    return a;
  }
  return gcf(b, a % b);
}

function solution(n, m) {
  let max = gcf(n, m);
  return [max, (n * m) / max];
}

최대공약수, 최소공배수 너무 오랜만에들어서 풀이법을 참고하였다.

  • 최대공약수 : 유클리드 호제법
  • 최소공배수 : a * b / 최대공약수



유클리드 호제법

a > b일 때, a % b = r(나머지가 0이 아닐 때)
b % r =r1(이작업을 반복하여 나머지가 0이 되는 r이 최대공약수)

잊지말자!! 언젠가 또 나올거 같은 느낌이다!😭🤩