[프로그래머스/코딩테스트 모음/Javascript] 5

TED·2023년 8월 18일
0

Javascript CodingTest

목록 보기
5/63
post-thumbnail
  • 오늘 풀고 있는 문제 중에 벨로깅이 필요한 문제가 너무 많아서 나워서 올린당....지친다ㅏ..

<오늘의 문제>

  1. 정수 제곱근 판별 1레벨
  2. 정수 내림차순으로 배치하기 1레벨
  3. 하샤드 수 1레벨

1. 정수 제곱근 판별

function solution(n) {
    var answer = 0;
    sqrt = Math.sqrt(n); // n의 제곱근을 반환! 제곱근 = 제곱되긴 전의 값..
    
    if (sqrt % 1 !== 0) { // 제곱근을 1로 나눈값이 0이면 정수, 아니면 소수 !
        answer = -1;      // 3, 7 등이 소수로 나온다.. 7의 제곱근은 2.6xxxx
    } else {
        answer = Math.pow(sqrt + 1, 2); // Math.pow(제곱될 값, 제곱 값)
    }                                   // 문제 설명을 보면 x+1를 제곱하라고 했으니 그대로하면된다.
    return answer;
}
  • 나의 풀이
    : 제곱근이나 제곱이나 갑자기 기억도안나고 자꾸만 헷갈려서 죽는줄 알았다;;;
    개념정리를 하고 문제풀이를 진행했고, 제곱에 관련된 메서드를 찾아서 정리했다.
    Math.sqrt(n) : 숫자 n의 제곱근을 반환.
    Math.pow(base, exponent) : base에 exponent를 제곱한 값을 반환.
    제곱근을 1로 나눈값이 0이어야 정수가 되는것도 골머리 아팠다 ㅋ 너무멍청하다 ㅋㅋㅋ
function solution(n) {
    return Math.sqrt(n) % 1 !== 0 ? -1 : Math.pow(Math.sqrt(n) + 1, 2);
}
  • 나의 풀이
    : 처음 풀 때부터 삼항연산자가 떠올랐다 ! ㅎㅎㅎ

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

function solution(n) {
    var answer = 0;
    
    answer = parseInt(n.toString().split('').sort((a, b) => b - a).join(''));
    // return (n + "").split('').sort((a, b) => b - a).join('') * 1;
    return answer;
}
  • 나의 풀이
    : 정수를 매개변수로 사용하는 것이기 때문에 문자열의 차순용인 sort()를 사용할수 없어서 paraseInt()로 전체적을 바꿔준 것이고,
    괄호 안에서는 문자형으로 계산된다. join()split()으로 분리된 문자열을 붙어주는 역할
    .toString() 대신 (n + "") + 연산자로 문자형으로 변환 가능 ! 마지막에 * 1를 함으로써 숫자형으로 형변환!
function solution(n) {
    //숫자가 분명히 더 빠름
    var nums =[];
    do{
        nums.push(n % 10);
        n = Math.floor(n / 10);
    } while(n > 0)

    return nums.sort((a, b) => b - a).join('') * 1;
  • 🌟나에겐 참신했던 다른 사람 풀이🌟
    : 이렇게 숫자형으로 풀이한게 실행속도가 더 빠르다고한다. 정수를 10으로 나눈값에 floor()로 소수점을 버린값이 do 로 인해
    먼저 실행되서 n값에 들어간다. 그 값을 내림차순하고 아직 문자열인 값에 * 1 를 해서 숫자형으로 변환해준다 !
    완전한 이해는 되지않아서 나중에 다시 내용을 추가해야겠다 ㅜㅜ

3. 하샤드 수

function solution(x) {  // x 가 10 이면
    var sum = 0;
    y = x.toString().split('');  // ['1', '0']
    
    for(let i = 0; i < y.length; i++) {
        sum = sum + parseInt(y[i]) // i=0 일 때 -> 1 
    } if (x % sum == 0) {          // i=1 일 떄 -> 0
        return true;
    } else {
        return false;
    }
    // return x % sum == 0 ? true : false; // 중괄호 밖으로 나와서 x값은 다시 기존의 정수값.
}
  • 나의 풀이
    : 처음부터 변수를 하나 선언 할당할 때 문자형변환, 분리를 하고 sum를 사용할거라 0으로 값을 선언해뒀다. split은 없어도 작동이되넹?? why?
    문자형이니 length 값 아래로 조건식을 적고, 각각의 인덱스값의 문자를 숫자형으로 변환하였다.
    return 값은 개인적으로 if else가 더 가독성이 좋아서 저렇게 작성했다.
profile
컴맹 개발 입문자

0개의 댓글