정보 처리/알고리즘

JAVA - Narcissus 알고리즘

본클라쓰 2011. 1. 26. 08:20

나르시스


숫자를 자리 단위별로 나눠서 자리수에 3제곱하여 합한 값이 자신의 숫자와 같은 수를 나르시스 수라 합니다.

ex) 153 = 1^3 + 5^3+ 3^3

 




코드 작성 기준

  1. 입력 받는 값은 정수형으로 계산(문자열 처리도 가능하지만 정수형을 계산함)
  2. 정수를 입력 받으면 정수의 자리수를 계산한 후 자릿수를 기준으로 숫자를 단위별로 누눠서 3제곱한 값을 계산
  3. 이렇게 얻은 값과 입력값이 일치하는지 검사




소스

import java.io.*;

 

public class NarcisusAgolithm {

 

/*

  * 정수를 입력 받는 메소드 정의

  */ 
 public int input()throws IOException{
  BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
  int input;
  
  do{
   System.out.print("Narssisus수를 구할 범위 입력 : ");
   input=Integer.parseInt(in.readLine());
   if(input<0){ System.out.println("양의정수로 다시 입력하세요!"); }
  }while(input<0);
  
  return input;
 }

/*

  * 자릿수를 탐색하는 메소드 정의

  */
 public int searchFigure(int in){
  int count=0;
  while(in>0){
   in/=10;
   count++;
  }
  return count;
 }

 

/*

  * 나르시스수인가 탐색하는 메소드 정의

  */
 public void searchNar(int in, int count){
  int s_nar=in;
  int sum=0;
  int figure;
  
  for(int i=count; i>0; i--){
   if(i==1){
    figure=in;
   }else{
    figure=(int)(in/(int)Math.pow(10,i-1));
   }
   
   sum+=figure*figure*figure;
   in-=figure*(int)Math.pow(10,i-1);
  }
  if(sum==s_nar){ System.out.println("나르시스값 : "+s_nar);}
 }


/*

  * 메인 메소드

  */
 public static void main(String[] args) throws IOException{
  NarssisusAgolithm n=new NarssisusAgolithm();
  int in=n.input();
  
  for(int i=1; i<=in; i++){
   int count=n.searchFigure(i);
   n.searchNar(i, count);
  }
 }
 
}  

 

출력 결과

 

후기) 문자열로 계산하는 방법은 자바 특성상 쉽습니다. 그래서 정수형 계산법을 이용하였습니다.

'정보 처리 > 알고리즘' 카테고리의 다른 글

버블정렬(Bubble Sort) - 교환정렬  (0) 2011.01.26
달팽이 알고리즘  (0) 2011.01.26
정렬 알고리즘  (0) 2011.01.26
N_Queen (Back Tracking 알고리즘)  (0) 2011.01.26
소수구하기  (0) 2011.01.26