관리 메뉴

공부기록용

JavaScript 문법 종합(연습06) 본문

✍️문제풀기✍️/JS_Programmers school

JavaScript 문법 종합(연습06)

과부하가즈아 2023. 5. 31. 20:32

Q.1 정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요

 

제한사항

  • 0 ≤ n ≤ 1,000,000
//(풀이 1)  for of 활용
// 1. 정수 n이 숫자형이므로 .split을 사용하려면 문자로 형변환> n+문자('') (또는 String(n))
// 2. .split('') 메소드 사용하여 한글자씩 분리 ['1', '2', '3', '4']
// 3. for of 활용
// 3-1. answer = answer + i * 1    i*1 다시 숫자로 형변환 (또는 pasrseInt(i))
// 4. return answer

function solution(n) {
    
    var answer = 0;

    var m = String(n);
    // n = (n + '').split('');
    
    for (i of m) answer += i * 1;
    return answer;

}
console.log(solution(1234))
//(풀이 2) .split() + .reduce() 활용
// 1. 정수 n이 숫자형이므로 .split을 사용하려면 문자로 형변환> n+문자('') (또는 String(n))
// 2. .split('') 메소드 사용하여 한글자씩 분리
// 3. .reduce() 메소드 사용 
// 3-1. .reduce(누적값, 현재값 => 결과, 초깃값);   (누산기라고 이해하면 쉬울듯)

// cf. reduce() 함수의 두번째 파라미터 cur에 초기값 0으로 잡고
// 첫번째 파라미터 acc에는 누적값, 두번째 파라미터 cur에 현재값 1, 2, 3을 숫자형으로 바꿔서(parseInt(cur)나 cur*1) 누적값에 더해준다. 

// 4. 모든 자릿수 더한 값 return

function solution(n) {
  return (n + '').split('').reduce((acc , cur) => acc + cur * 1, 0);
}
// 1. for (let i = 0; i <= 6; i++) 선언 [매개변수 최대값이 1,000,000이므로 i<=6]
// 2. 매개변수 n이 10의 i제곱보다 작을때 , n의 자릿수 cnt는 i이다.
// 2-1 . Math.pow(n,i) n의 i제곱의 수를 구하는 메서드
// 3. 자릿수를 구하고 반복문을 break; 한다.
// 4. n의 자릿수만큼 반복하는 for (let i = 0; i < cnt; i++) 반복문을 만들고
// 4-1. n에서 10을 나눈것의 나머지를 ans에 더하는 식으로 각 1,10,100,...자리의 숫자를 더해준다.
// 4-2. n을 10으로 나눈것의 몫을 n에 대입한다.
// 4-3 자릿수만큼 반복한다.
// 5. ans를 반환한다.

function solution(n) {
  let ans = 0;
  let cnt = 0;

  for (let i = 0; i <= 6; i++) {
    if(Math.pow(10,i)>n){
      cnt=i;
      break;
    }
  }

  for (let i = 0; i < cnt; i++) {
    ans += n%10;
    n = Math.floor(n/10);
  }

  return ans;
}

 

Q2. 순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ n ≤ 1,000,000
function solution(n) {

    const answer = [];

    for ( let i = 1; i <= n; i++ ) {
        if ( n % i === 0 ) {
            answer.push(i);
        }
    }

    return answer.length;
}

//console.log(solution(20));

 

Q3. 개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • hp는 자연수입니다.
  • 0 ≤ hp ≤ 1000
// * 1~3번 Math.floor 메소드 사용
// 1. 장군개미 병력 = hp를 일단 가장 공격력이 큰 장군개미(ant5)의 공력력 5로 나눔 
// 2. 병정개미 병력 = 전체 hp에서 장군개미(ant5) 전체공격력빼고 병정개미(ant3) 공격력인 3으로 나눔
// 3. 일 개미 병력 = 일개미는 공격력 1이니까 전체 hp에서 -장군개미 공력력 -병정개미 공력력 뺀거 == 일개미 병력 수
// 4. 1 + 2 + 3 합 return

function solution(hp) {
    var answer = 0;

    let ant5 = Math.floor(hp/5);

    let ant3 = Math.floor((hp-ant5*5)/3);

    let ant1 = hp-ant5*5-ant3*3

    answer = ant5-ant3-ant1

    return answer;
}
//   1. 각 5 3 1 로 나눈것의 몫을 받을 ans 변수 선언
//   2. 1을 제외한 5,3을 담은 army 배열 선언
//   3. army.forEach를 통해 각 요소로 hp를 나눈것의 몫을 ans에 더해주고
//   3-1. 그후 해당 요소로 hp를 나눗셈 해준다.
//   4. ans에 남은 hp를 더해 반환한다.
//   (1로 나누어봤자 의미 없으니 1로 나누는 과정을 생략한 것)

function solution(hp) {
    let ans=0;
    const army = [5,3];
    army.forEach((a)=>{
        ans+=Math.floor(hp/a); 
        hp%=a;});
    return ans+=hp;
  }

 

Q4. 문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.
function solution(my_string) {
  // 1. answer 변수 선언
  var answer = 0;

  // 2. str 변수 선언
  // 2-1. .split() 메소드로 my_stirng 한글자씩 분리
  var str = my_string.split("");

  // 3. for of문 활용
  // 3.1 if문 활용 str안의 숫자형 i = true 라면  answer 쏙쏙..더해주세요..
  for (let i = 0; i < str.length; i++) {
    if (Number(str[i])) answer += Number(str[i]);
  }

  // 4. return answer..
  return answer;
}
// (풀이 1. for of - if 활용)
// 1. answer 변수 선언
// 2. str 변수 선언
// 2-1. .split() 메소드로 my_stirng 한글자씩 분리
// 3. for of문 활용
// 3.1 if문 활용 str안의 숫자형 i = true 라면  answer 쏙쏙..더해주세요..
// 4. return answer..

function solution(my_string) {
  let answer = 0;
  let str = my_string.split("");
  for (let i of str) {
    if (Number(i)) answer += Number(i);
  }
  return answer;
}



function solution(my_string) {
  let ans = 0;
  let str = my_string.split("");
  for (var i of str) {
    if (Number(i) === true) ans += Number(i);
  }
  return ans;
}
// 1. 숫자들을 더해줄 ans변수선언
// 2. my_string의 length만큼 반복할 for문을 선언
// 2-1 isNaN메서드를 통해 각요소를 조회하며 , 숫자에 해당하는 요소만 parseInt를 거쳐 ans에 더해준다.
// 3. ans 반환

function solution(my_string) {
  // 1. 숫자들을 더해줄 ans변수선언
  var ans = 0;
  // 2. my_string의 length만큼 반복할 for문을 선언
  // 2-1 isNaN메서드를 통해 각요소를 조회하며 , 숫자에 해당하는 요소만 parseInt를 거쳐 ans에 더해준다.
  for (let i = 0; i < my_string.length; i++) {
    // isNaN(값) -> 값이 숫자가 아니면!! 아니면 ,true를 반환 숫자면 false를 반환
    if (isNaN(my_string[i])) {
    } else {
      ans += parseInt(my_string[i])
    }
  }

  // 3. ans 반환
  return ans;
}
function solution(my_string) {
  let ans=0;
  for (let i = 0; i < my_string.length; i++) {
    if (!isNaN(my_string[i])) ans += parseInt(my_string[i]);
  }
  return ans;
}

// best solution
function solution(my_string) {
    return [...my_string].reduce((acc,cur)=>Number(cur) ? +acc + +cur : acc, 0)
}

 

Q5. 문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.

 

제한사항

  • 1 ≤ my_string의 길이 ≤ 100
  • my_string에는 숫자가 한 개 이상 포함되어 있습니다.
  • my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다.
function solution(my_string) {
  let str = my_string.split('');
  let answer = []; 
  for (i=0; i < str.length; i++) {
    if(!isNaN(str[i])) answer.push(Number(str[i]))
  }
  return answer.sort((a,b) => a - b);
}
// 1.my_string을 분리한것에
// 1-1 filter를 돌려서 숫자에 해당하는 녀석들만 뽑아내서 배열을 만든후
// 1-2 오름차순 정렬해서 리턴한다.

function solution(my_string) {    
    return my_string.split("").filter(도원 => !isNaN(도원)).map(Number).sort((a, b) => (a - b));
}
Comments