TIL17-01 오늘의 코딩테스트

김태혁·2023년 1월 28일
0

TIL

목록 보기
59/205
  1. 자릿수 더하기
    자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
    예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
  function solution(n) {
    return n.toString().split("").map(Number).reduce((total, value) => total+value, 0);
      // 자연수 n을 문자화 -> 배열화 -> 배열 안을 숫자화 -> 배열 안 숫자 모두 더하기
}
  • arr.reduce(callback[, initialValue]) 매개변수
    -- callback 다음의 네 가지 인수를 받는다
    • totalValue: 콜백의 반환값(축적된 총 값)
    • currentValue: 현재 배열 내 처리되고 있는 요소
    • currentIndex(Optional): 현재 배열 내 처리되고 있는 요소의 인덱스
    • array(Optional): reduce 호출에 사용되는 원 배열
      -- initialValue(Optional): 콜백의 첫 번째 인수의 값에 사용되는 디폴트 값
  1. 정수 내림차순으로 배치하기
    함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
function solution(n) {
    let s = String(n).split("").map(Number).sort( (a,b) => b-a).join("");
          //정수를 문자화->배열화->배열안을 숫자화-> 내림차순 정렬->문자열화
    return Number(s);// 문자열을 다시 숫자로
}
  1. 정수 제곱근 판별
    문제 설명
    임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
    n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
function solution(n) {
    let x = 0; // 초기값 선언
    for(let i = 1; i <= n; i++) {
        if ( Math.pow (i, 2) == n ) {  
           x = (i+1) * (i+1); // i*i 이 n과 같다면 i는 n의 제곱근
        break;
        } 
        
    }
    if (x == 0) { //제곱급이 아니라면 x값이 0이므로 -1을 반환
        return -1;
    }
    return x;  //i+1의 제곱을 반환
  }
  1. 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
function solution(arr) {
    let a = [];
    let min = Math.min(...arr); //최소값 찾기
    let answer = arr.filter((i) => i !== min);//최소값만 제거
    if (answer.length == 0 ) {//빈배열일때 배열 길이는 0
         a.push(-1);          // 배열에 -1 추가
        return a
        }
    return answer;
}
  1. 콜라츠 추측
    1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.
function solution(n) {
    let count = 0;
    for (let i = 1; i < 8000000; i++) {
        if ( n % 2 === 0) { // n이 짝수 일때
            n = n/2;
            count ++;            
       } else if ( n === 1) { //n이 1이면 반복문을 먼춘다.
        break;
       } 
        else if ( n !== 1) { //n이 1이 아니고, 홀 수일 때
           n= (n*3) +1;
           count ++ ;
       }
    }
    if ( count > 500) { // count(작업)가 500번을 넘을 때 
        return -1
    }
    return count;
}
  1. 하샤드 수
    양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
function solution(x) {
    let arr = x.toString().split("").map(Number).reduce((a,b) => a+b , 0)
             //정수x를 문자화->배열화->   숫자화  -> 원소들의 합
    if ( x%arr === 0) { // x를 arr로 나눴을 때 나머지가 0이면 하샤드 수
        return true;
    } else {
        return false;
    }
}

7.두 개 뽑아서 더하기
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

function solution(numbers) {
    let answer = [];
    for (let i = 0; i < numbers.length; i++) {
        for (let j= 0; j< numbers.length; j++){
            if( i !==j ) {                    //중첩 반복문에서 i와 j가 같지 않을 때
                answer.push(numbers[i]+numbers[j]); // 각각의 요소들을 더해준 값을 배열에 넣는다.
            }     
        }
       
    }
    let set = new Set(answer);  // 값들을 넣은 배열에 중복 된 수들을 제거해준다.
    let arr = [...set];             //객체를 배열화 한다.
    return arr.sort((a,b) => a-b); //오름차순 정렬해준다.
}
profile
도전을 즐기는 자

0개의 댓글