본문 바로가기
코딩테스트

(javascript)정수 내림차순으로 배치하기, 하샤드 수, 두 정수 사이의 합

by 어뇨 2024. 1. 12.

문제 1. 정수 내림차순으로 배치하기

function solution(n) {
  let arrayN = n.toString().split('').map(Number)

 let final =  arrayN.sort((a , b)=> b - a );
 let count = ''
  for ( let i = 0 ; i < final.length ; i++){
  count += final[i].toString()      
   }    
  return count*1  
}


정수 n의 각 자릿수를 큰것부터 작은순으로 정렬한 새로운 정수를 리턴해야한다.
우선 정수자체에서는 정렬하는 법을 모르기에, 문자열로 바꾼뒤 배열로 만드는 방법을 사용했다.
그리고 배열을 sort 함수를 사용해 정렬시켰고, 그리고 반복문을 통해 count 에 문자열로 순서대로 반환시킨뒤
그 문자열에 *, /, - 를하면 자동형변환이 되기 때문에 return count에 *1을했다.
 

문제 2. 하샤드 수

function solution(x) {
  let num = x.toString().split('')
  count = 0
  for(let i = 0 ; i < num.length ; i++){
  count += Number(num[i])
   }
return  x % count === 0 ? true : false ;
}

 

우선 하샤드 수에 대해 알아야 한다. 임의의 정수가 각 자릿수의 합으로 나누어 떨어지는 수 를 하샤드 수라고 한다.

임의의 정수 x를 문자열로 바꾼뒤 split 함수를 통해 각 자릿수를 나누고
for문을 이용해서 각 자릿수의 정수를 더했다. 
그리고 삼항연산자를 사용해 x / count 의 나머지 값이 0 이라면 true를 반환, 0이 아니라면 false를 반환하는 코드를 짰다.


문제 3. 두 정수 사이의 합 

function solution(a, b) {
  let arrayN = [a, b]
  arrayN.sort((a, b ) => a - b)

  count = 0;
  for (let i = arrayN[0] ; i <= arrayN[1]; i++){
      count += i
}

  return count;
}

처음 문제를 풀땐 정렬을 안하고 그냥 for 문을 사용해서 했는데 그러면 정수 a 가 정수 b 보다 크면 반복문이 작동을 안하는 에러가 있었다,

그렇기 때문에 정수를 배열로 만든뒤 정렬하는 과정이 필요했고, for 문을 이용해 
i의 값을 arrayN의 0번째 인덱스 즉 a, b 둘중 작은쪽을 주고 i의 최댓값은 a, b 중 큰 값을 준 뒤 
count에 더하면 풀렸습니다.