[Level1] 7. 31 ~ 35




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


31. 제일 작은 수 제거하기

프로그래머스

function solution(arr) {
  arr.splice(arr.indexOf(Math.min(...arr)), 1)
  return arr.length ? arr : [-1] 
}

우와. 베스트풀이랑 똑같다!
다만 맨날 헷갈리는 걸 한번만 짚고 가자

  • splice : 시작위치부터 갯수
  • slice : 시작위치부터 끝 위치



32. 정수 내림차순으로 배치하기

programmers

function solution(n) {
  let arr = (n + "").split("");
  arr.sort((x, y) => y - x);
  let str = "";
  for (let i = 0; i < arr.length; i++) {
    str += arr[i];
  }
  return str / 1;
}

어제 놓쳤던 string to arr 를 split으로 이용했다!


best 풀이

function solution(n) {
  const newN = n + "";
  const newArr = newN
    .split("")
    .sort()
    .reverse()
    .join("");

  return +newArr;
}

정말 arr 함수 사용의 적절한 예다.
나는 for 문을 통해 하나하나 더하던걸 여기서는 join(““)을 활용했다.
이게 더 간결하니 좋은 것 같다!



33. 정수 제곱근 구하기

programmers

function solution(n) {
  for (let i = 1; i * i <= n; i++) {
    if (i * i === n) {
      return (i + 1) * (i + 1);
    }
  }
  return -1;
}


best 풀이

function nextSqaure(n){
    var result = 0;
    var n = Math.sqrt(n);
    result = Number.isInteger(n) ? Math.pow(n+1, 2) : 'no';
    return result;
}

제곱근을 먼저 구해서 하는 방식…
for 문 안돌아도 되니 시간복잡도 최고일 것 같다!
pow 쓰는것도 그렇고 본 받자!!



34. 자릿수 더하기

programmers

function solution(n) {
  let arr = (n + "").split("");
  let sum = 0;
  for (let i = 0; i < arr.length; i++) {
    sum += arr[i] / 1;
  }
  return sum;
}


best 풀이

return (n+"").split("").reduce((acc, curr) => acc + parseInt(curr), 0)

string 배열의 누적합도 reduce로 바로 구할 수 있다는 것 알아두기!




35. 자연수 뒤집어 배열로 만들기

programmers

function solution(n) {
  return (n + "")
    .split("")
    .reverse()
    .map((item) => parseInt(item));
}

우와 한줄짜리 숏코딩 성공했다!
스스로 성장하고 있음을 느껴서 너무 뿌듯하다..!!



best 풀이

function solution(n) {
    // 문자풀이
    // return (n+"").split("").reverse().map(v => parseInt(v));

    // 숫자풀이
    var arr = [];

    do {
        arr.push(n%10);
        n = Math.floor(n/10);
    } while (n>0);

    return arr;
}

효율적인 면으로는 string 으로 바꿔서 푸는 것보다 number 그대로 푸는 것이 더 좋다.
위 코드는 number로 정석적으로 푼 방법!
와…무슨 수학자같다…ㅋㅋㅋ 멋지다.
이 방법도 기억해두기!