문제

 

풀이 코드

function solution(n) {
  let sortNum = n
    .toString()
    .split('')
    .sort((a, b) => a - b)
    .reverse()
    .join('');
  return parseInt(sortNum);
}

 

풀이 과정

함수를 이용하여 풀이 하였다.

각 단계별로 설명하면 다음과 같다.

1. toString 함수를 이용하여 문자열로 형 변환
2. split('') 함수를 이용하여, 각 요소를 나누어 배열 생성
3. sort() 함수를 이용하여, 각 요소를 정렬
4. reverse() 함수를 이용하여, 정렬된 요소를 반전
5. join() 함수를 이용하여, 배열의 요소들을 문자열로 생성
6. parseInt() 함수를 이용하여, 문자열을 정수로 변환하여 반환

 

이렇게 풀이하고나서 다른사람은 어떻게 풀었나 보았는데, 

sort()  함수의 인자를 비워놔도 정렬이 된다

 

결국 나는 sort 함수 내에 풀필요한 함수인자를 더 넣어줬다

 

이 부분만 빼면 나와 동일하게 푼것같다!

 

문제

 

풀이 코드

function solution(n) {
  let num = Math.sqrt(n);
  if (num == Math.floor(num)) return (num + 1) ** 2;
  else return -1;
}

 

풀이 과정

sqrt 함수를 이용하여, 제곱근을 구하고, 

floor 함수를 이용해 소수점 아래 수를 전부 버리고, 제곱근의 값과 같은지 비교하였다. 

이 과정에서 제곱근이 정수인지 판별할 수 있었고,

 

제곱근이 정수라면 다음수의 제곱근을 반환,

제곱근이 정수가 아니라면 -1 을 반환하게 하였다.

문제

 

풀이 코드

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

 

풀이 과정

처음에 sort 를 하여, 0인덱스의 값을 제거했다.

이렇게 하고나서 문제를 다시보니 배열의 순서는 유지 되어야한다

 

그래서 Math.min 함수를 통해, 최소값이 있는 해당 인덱스를 구하여 , splice 함수를 적용했다,

단, 제거했을때 배열에 남는값이 없다면, ( 배열의 길이가 0 이라면 ) [-1] 을 return 하게 적용했다.

 

여기서도 Math.min 함수에 처음에 Math.min(arr) 로만 작성했지만, 테스트에서 Fail 되었다..

 

그래서 그 이유를 검색해보니 

Math.min  함수에 배열의 인자 하나하나 전달하기 위해서는 spread 를 사용해야 한다고 MDN 에 나와있었다!

문제

 

풀이 코드

const calcuGCD = (n, m) => {
    return n % m == 0 ? m : calcuGCD(m, n % m);
}

function solution(n, m) {
    let gcd = calcuGCD(n,m);
    let lcm = (n * m) / gcd;
    return [gcd, lcm]
}

 

풀이 과정

최대공약수를 구하기 위해 유클리드 호제법 을 사용하였다.

유클리드 호제법이란?

A , B 의 최대공약수를 구하는 수식
1. 만약 A 를 B 로 나눈 나머지 값이 0이면, 최대공약수는 B가 된다.
2. 그렇지 않다면 A 를 B로 대치하고, B를 A를 B로 나눈 나머지로 대치한다
3. 1번의 조건이 성립될때까지 계속 반복한다.

위의 조건을 재귀함수를 통하여 코드로 구현하면

function GCD(A,B) {
	if (A % B == 0) {
    	return B;
    }
    else {
    	return GCD(B, A % B);
    }
 }

위와 같이 나타낼수 있다! 

위의 코드를 기반으로 삼항연산을 적절히 섞어 구현하였고,

 

최소공배수는 두수를 곱하고, 최대공약수로 나눈 값이 된다!

 

다른사람의 코드

function gcdlcm(a, b) {
    var r;
    for(var ab= a*b;r = a % b;a = b, b = r){}
    return [b, ab/b];
}

이 코드는 좀 신기해서 가져왔다.

for문을 이용하여 구현하였다

 

대박

문제

 

풀이 코드

function solution(num) {
  let count = 0;

  while (num !== 1) {
    num = num % 2 === 0 ? num / 2 : num * 3 + 1;
    count++;
  }
  return count < 500 ? count : -1;
}

 

풀이 과정

간단하게 삼항연산자 를 통하여 구현하였다.

코드를 너무 간단하게 구현 하였기 때문에 설명은 생략!

+ Recent posts