TIL19-02 오늘의 코딩테스트

김태혁·2023년 1월 31일
0

TIL

목록 보기
67/205
  1. 예산
    물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다.
    부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요.
function solution(d, budget) {
    let a = d.sort((a,b)=> a-b); //오름차순 정렬 후 앞의 원소부터 더해서 예산을 안넘을 때 그때까지 더해진 원소 수를 구한다.
    let b = []; //  더해질 값들이 들어갈 배열
    let c = 0;   // 더해질 값의 초기값 선언
    for (let i =0; i< a.length; i++ ) {
        if ( c <= budget) { 
            c += a[i];  // 예산이 넘을 때까지 더해주기
            b.push(a[i]);  // 그럴 때마다 값 넣어주기
        }  
    }
    if ( c > budget) {
        return b.length -1;  //더한 값이 예산을 넘을때 한개의 값이 더 들어가므로 더해준값들의 배열의 길이에서 -1 해준다.
    } else {
        return b.length; //더해준값들의 배열의 길이가 예산을 받을 최대 부서 수
    }
};
  1. 약수의 합
    정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
function solution(n) {
    let answer = 0;
    for( let i =1; i <=n; i++ ) {
        if( n%i === 0) {  //n/i의 나머지가 0일 때 i의 값들 n의 약수이다.
            answer += i ;  
        } 
    }return  answer//약수의 배열의 총합을 구한다.
}
  1. 백준 5585 문제
    타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사고 카운터에서 1000엔 지폐를 한장 냈을 때, 받을 잔돈에 포함된 잔돈의 개수를 구하는 프로그램을 작성하시오.
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split(' ');

let num = Number(input);

function solution(num) {
    let a = 1000 - num;  // 거슬러줄 돈
    let coin = [500, 100, 50, 10, 5, 1];
    let count = 0;
    for (let i = 0; i < coin.length; i++) {
        count += parseInt(a / coin[i]); // 거슬러줄 돈을 각각의 동전으로 나눴을 때 몫의 정수값이 그 동전의 최대 갯수이다. 그 값을 카운트에 더해준다.
        a = a % coin[i]; // 거슬러줄 돈을 각각의 동전으로 나눈 나머지를 구하고, 다음 동전으로 넘어가 반복해준다.
    }
    return count; //최종적으로 더해진 모든 동적의 갯수
}

console.log(solution(num));
profile
도전을 즐기는 자

0개의 댓글