본문 바로가기
백준알고리즘

백준알고리즘: p4673 셀프넘버

by socialcomputer 2021. 2. 21.
반응형

분류: 함수

 

Q : 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.

양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 

예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.

33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...

n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다. 

생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97

10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력 출력
입력 없음
10000보다 작거나 같은 수의 셀프넘버를 찾아라
1
3
5
7
9
20
...
9993

 

//백준알고리즘 제출시 클래스 이름은 Main으로 바꿔야 됨 
public class p4673_selfnumber {
	
	static int d(int n) {
		int n_length = Integer.toString(n).length();
		int original = n;
		int sum = 0;
		for(int i=0; i<n_length; i++) {//각 자릿수 더하기
			int remain = n % 10;
			sum += remain;
			n = n/10;
		}
		n = sum+original; //원래 수 더하기
		return n;
	}
		
	public static void main(String[] args) {
		
		int[] notSelfNum = new int[10000]; //셀프넘버가 아니면 1로 체크
		for(int i=0; i<10000; i++) {		
			if(d(i)<10000) notSelfNum[d(i)] =1;  
			else continue;
		}
		for(int i=0; i<10000; i++) { 
		if(notSelfNum[i] != 1)  System.out.println(i);
		}
	}
}

▶먼저 셀프넘버라는 걸 이해하는게 첫번째로 어려웠다.

그래서 대충 어떻게 해야할지 검색해 보다가

배열을 쓰는 걸 보고

함수 d(n)에 1부터 10000까지 넣어서 나오는 숫자는 셀프넘버가 이니다

라는 걸 생각했다.

그럼 배열의 셀프넘버가 아닌 숫자(인덱스)에 1을 넣어주고

>>여기서 d(n)이 10000을 넘어가면 continue를 해줘야 됨. 배열크기가 10000이니까.

나중에 1이 아닌 값을 가지는 인덱스를 출력해주면 된다.

 

 

객체생성없이 접근할수 있게 만드는 명령어가 static 이다. 그래서 메인메소드 앞에 항상 static이 붙어있다

public static void main(String[] args)

static 변수와 메서드와 싱글톤까지 다음 링크에서 설명을 볼 수 있다. wikidocs.net/228

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net


채점결과

 

링크 www.acmicpc.net/problem/4673

 

4673번: 셀프 넘버

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,

www.acmicpc.net

반응형

댓글