코딩도장 Lv.1

|

<!-- 문제
어떤 자연수 n이 있을 때, d(n)을 n의 각 자릿수 숫자들과 n 자신을 더한 숫자라고 정의하자.

예를 들어

d(91) = 9 + 1 + 91 = 101
d(100) = 1 + 0 + 0 + 100 = 101

이 때, n을 d(n)의 제네레이터(generator)라고 한다. 위의 예에서 91은 101의 제네레이터이다.

어떤 숫자들은 하나 이상의 제네레이터를 가지고 있는데, 101의 제네레이터는 91 뿐 아니라 100도 있다.

그런데 반대로, 제네레이터가 없는 숫자들도 있으며, 이런 숫자를 인도의 수학자 Kaprekar가
셀프 넘버(self-number)라 이름 붙였다. 예를 들어 1,3,5,7,9,20,31 은 셀프 넘버 들이다.

1 이상이고 5000 보다 작은 모든 셀프 넘버들의 합을 구하라.

d(1) = 1 + 1 = 2 '1은 2의 제네레이터'
d(2) = 2 + 2 = 4 '2은 4의 제네레이터'
d(3) = 3 + 3 = 6 '3은 6의 제네레이터'
d(4) = 4 + 4 = 8 '4은 8의 제네레이터'
~
d(9) = 9
d(10) = 1 + 0 + 10 = 11 '10은 11의 제네레이터'
d(11) = 1 + 1 + 11 = 13 '11은 13의 제네레이터'
~
d(20) = 2 + 0 + 20 = 22 '20은 22의 제네레이터'
~
d(91) = 9 + 1 + 91 = 101
d(100) = 1 + 0 + 0 + 100 = 101
~
d(5000) = 5 + 0 + 0 + 0 + 5000 = 5005 '5000은 5005의 제네레이터'

셀프 넘버 = x의 제네레이터 에서 x가 없는 경우 ( ex. 1, 3, 5, 7, 9, 20, 31....)

-->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="ko">

<head>
<script>
	// 멍멍
    function solution(){                                              

        var generator = 0;
        var b_sum = 0;
        for(var list=1; list<5000; list++){ // 1 ~ 5000 사이의 제네레이터의
          var flag = false;
          for(var i=1; i<list; i++){
                generator = 0;
                var j = i.toString().split(""); // 9 9 9
                for(let k=0; k<j.length; k++){
                    generator += parseInt(j[k]); // 9+9+9
                }
                generator += i; // 1026
                 if(generator==list){
                  flag = true;
                  break;
                 }
          }
          if(!flag){
            b_sum += parseInt(list);
          }
       }              
       console.log(b_sum); 
    }
    // 왈왈
    function solution1(){
        
        var hap = 0;
        for(var i=1; i<5000; i++){
          var notselfNumber= false;
        
          for(let c=1; c < i; c++){
            var sum = parseInt((c % 10000)/1000) + parseInt((c % 1000) / 100) + parseInt((c % 100) / 10) + parseInt(c % 10) + c;
            if(sum == i ){
              notselfNumber = true;
              break;
            }
          }
          if(!notselfNumber)
            hap += parseInt(i);
       }
       console.log("셀프넘버의 합 : " + hap);
    }                         

</script>
</head>

<body>
    <input type="button" value="알고리즘 부시기" onClick="solution()"> // 1227365
    <input type="button" value="알고리즘 부시기" onClick="solution1()"> // 1227365
</body>


</html>

'Algorithm Study' 카테고리의 다른 글

재귀함수? rescursive? 이진함수트리?  (0) 2022.02.10
코딩도장 Lv.2  (0) 2020.01.10
And