https://www.acmicpc.net/problem/2231

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

/**
 * 문제:
 * 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다.
 * 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다.
 * 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다.
 * 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.
 * 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.
 *
 * 입력:
 * 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.
 *
 * 출력:
 * 첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.
 */

const fs = require('fs');
const input = fs.readFileSync('./test.txt').toString().trim();
let answer = 0;

for(let i = 1 ; i <= Number(input) ; i++) {
    const arr = i.toString().split("");
    let sum = i;
    arr.forEach((a) => {
        sum += Number(a);
    });

    if(sum === Number(input)) {
        answer = i;
        break;
    }
}

console.log(answer);
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/120882

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(score) {
    let answer = new Array(score.length).fill().map((v) => 0);
    let args = [];
    score.forEach((sc, index) => {
        let total = 0;
        sc.forEach((s) => {
            total += s;
        })
        args.push({arg : total/sc.length, index: index});
    });
    
    args.sort(function(a,b) {
        return b.arg - a.arg;
    });
    
   
    let tmp = [];
    let max = 0;
    let rank =1;
    while(true) {
        if(args.length === 0){
            break;
        }
        
        if(tmp.length === 0) {
            tmp.push(args.shift());
            max = tmp[0].arg;
        }
        
        args.forEach((a) => {
               if(max === a.arg) {
               tmp.push(a);
            } 
        });
        
        args = args.filter((a) => max !== a.arg);
            
        for(let i = 0 ; i < tmp.length ;i++) {
            answer[tmp[i].index] = rank;
        }
        
        rank += tmp.length;
        tmp = [];
        max = 0;
        
    }
        
    return answer;
}
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/120923

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(num, total) {
    var answer = [];
    if(num % 2 !== 0) {
        // 홀수
        let n = Math.floor(num/2);
        for(let i = 0 ;i < num ; i++ ){
            answer.push((total/num)-n+i);
        }
        return answer;
    }
    // 짝수
    let m = 0;
    for(let i = 1 ; i < num ; i++){
        m += i;
    }
    
    let n = (total-m)/num;
    for(let i = 0; i < num ; i++) {
        answer.push(n+i);
    }
    return answer;
}
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/42842?language=javascript 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(brown, yellow) {
    var answer = [];
    const yList = [];
    
    // [b, y] 
    // y의 가로 >= 세로 구성되는 경우의 수들 찾음 [ y1, y2 ]
    // (y1 * 2) + ( y2 + 2 ) * 2 === b 를 찾는다.
    // [y1+2 , y2+2] 를 리턴
    
    let i = 1;
    let w = 1;
    
    while(true) {       
        if(w < i) break;
        if(yellow % i === 0) {
            w = yellow / i;
            if(w < i) break;
            yList.push([w, i]);
        } 
        i++;
    }
    
    yList.forEach((y) => {
       let h = (y[0]*2)+((y[1]+2)*2);
        if(h === brown) {
            answer.push(y[0]+2);
            answer.push(y[1]+2);
            return false;
        }
    });
    
    
    return answer;
}
728x90

+ Recent posts