[백준] - 단계별로 풀어보기(함수) 4673

김민경·2022년 4월 11일
0

백준

목록 보기
29/39

백준 4673번

셀프 넘버

문제 출처 https://www.acmicpc.net/problem/4673


내가 작성한 코드

package baekjoon04;

public class back4673 {

	public static int self_number(int n) {
		int sum=n; //들어온 값을 먼저 sum에 넣어준다.
		
		while(n!=0) {
			sum = sum + (n%10); //일의 자리부터 하나씩 더하기
			n = n/10; //10으로 나누면서 더한 값 버리기
		}
		
		return sum; //최종 값 리턴
	}
	
	public static void main(String[] args){
		boolean str[] = new boolean[10001]; //false로 초기화 되어있음
		
		for(int i=1; i<=10000; i++) { //0부터 10000까지
			int result = self_number(i); //self_number 함수를 호출해 결과 값 구하기
			
			if(result<=10000) { //결과 값이 10000이하면
				str[result] = true; //그 해당 값 인덱스 배열에 true 대입
			}
		}
		
		for(int i=1; i<=10000; i++) {
			if(str[i]==false) { //해당 인덱스에 false가 있다면 생성자가 없는 숫자이다.
				System.out.println(i);
			}
		}

	}
}

접근 방법

1부터 10000까지
1 -> 1+1 =2 str[2] = true
2 -> 2+2 =4 str[4] = true
235 -> 235+2 +3+5=245 str[235] = true
이렇게 2, 4, 245해당 수를 생성자로 하는 생성자를 가지고 있는 수이다.
그러므로, 결과(sum)에 없는 수는 생성자를 가지고 있지 않는 수이다. 결과값의 해당 인덱스에 true를 넣어주면 생성자가 있는 수 -> 최종적으로 false가 있는 배열의 인덱스는 생성자가 없는 수이다. str[1] = false , str[3] = false

self_number 함수는 보면 들어온 수를 먼저 sum에 넣어준다
ex) 235가 들어오면 sum = 235

  • 235(n)%10 = 5 (일의자리) sum = 235 + 5 =240
    5라는 일의 자리수를 구한 후, 235/10 = 23 이라는 숫자를 얻어
  • 23(n)%10 = 3 (십의자리) sum = 240 + 3 =243
    3 이라는 십의 자리수를 구한 후, 23/10 = 2 이라는 숫자를 얻어
  • 2(n)%10 = 2 (백의자리) sum = 243+ 2
    2라는 백의 자리수를 구한 후, 2/10 = 0 이면 반복문을 벗어나 sum을 return한다.

0개의 댓글

관련 채용 정보