자바스크립트 알고리즘 문제 (1주차)- 3. 완전수 구하기

1주차에서 세번째로 풀어보게 될 알고리즘 문제는 바로바로...
완전수 구하기이다.
문제의 출처는 역시나 코딩도장이다.

완전수가 무엇인지는 문제에 설명이 되어있으니 일단 문제를 보자.

자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다.
예를 들면, 6과 28은 완전수이다.
6=1+2+3 // 1,2,3은 각각 6의 약수
28=1+2+4+7+14 // 1,2,4,7,14는 각각 28의 약수
입력으로 자연수 N을 받고, 출력으로 N 이하의 모든 완전수를 출력하는 코드를 작성하라.

휴... 문제가 점점 어려워지는 것 같은 느낌인데 일단 나만 그렇게 느끼는 거라 생각하면서 문제풀이를 해보겠다.

  <script>
    var perfectNum = []; 
    var inputNum = Number(prompt("숫자를 입력하세요. 입력한 숫자 이하의 완전수를 출력합니다."));

    for (i=1; i<=inputNum; i++) { 
      var sumNum = 0; 
      for (j=0; j<i; j++) { 
        if (i%j===0) { 
          sumNum += j;
        }
      }
      if (i===sumNum) {
        perfectNum.push(i);
      }
    }

    document.write(perfectNum);
  </script>

휴... 이중 반복문에다가 조건문까지 난리다.
설명 gogo

  1. perfectNum이라는 배열을 생성한다. 여기엔 완전수가 들어갈 예정이다.
  2. 입력받을 수를 위한 변수 생성이다. 역시 두번째 문제와 똑같이 prompt로 입력받고 Number로 감싸주었다.
  3. for문을 이용하여 입력받은 숫자의 범위 안에서 반복문이 돌아가게 하였다. 왜 1부터 i가 시작하냐면 그것은 완전수는 양의 약수들의 합이기 때문.
  4. for문 안의 for문과 if 문을 사용하여 양의 약수들을 구하고, sumNum이라는 변수를 선언하여 완전수를 구하는 개념으로 사용하였다.
  5. 마지막에 보이는 if 문에서 i가 sumNum과 일치한다면, perfectNum 배열에 i를 집어넣는 것을 반복하였다.
  6. 역시나 화면에 출력!

모든 학문에서든지간에 정확한 설명을 위해서는 국어 능력이 필수라는 것을 다시금 깨닫는다. 더불어 앞으로 직업으로 먹고 살 이 프로그래밍 능력도 필수라는 것을 깨닫기도 하는 날이다.
ps. 문과라고 해서 모두가 국어를 잘 하지는 않는다. 이것은 나의 이야기.

좋은 웹페이지 즐겨찾기