본문 바로가기
프로그래밍/백준 알고리즘 코드

백준 4673 자바 java 셀프 넘버 함수2단계

by 졸린이 2020. 9. 9.
반응형

백준 4673 자바 java 셀프 넘버 함수 2단계

1부터 10000까지 셀프넘버를 출력해야 한다. 생성자가 없는 수를 출력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.Scanner;
 
//baekjoon_4673
public class Main{
    static boolean selfNum(int n) {
        boolean flag = true;
        for(int i=1; i<n; i++) {
            int sum=i;
            int mod=i;
            while(mod != 0) {
                sum += mod % 10;
                mod /= 10;
            }
            if(n == sum) {
                flag = false;
                break;
            }
        }
        return flag;
    }
    public static void main(String[] args) {
        for(int i=1; i<=10000; i++)
            if(selfNum(i))
                System.out.println(i);
    }
}
cs

main함수부터 보자.

line 22 : 1~10000이 범위이므로 for문으로 반복한다.

line 23, 24 : i를 함수로 보내서 그 수가 셀프 넘버면 true값으로 반환받아서 출력한다.

line 5 : 자바에서 객체 생성 없이 함수 호출하기 위해선 static으로 작성해야 한다. true false값을 반환할 것이므로 boolean을 리턴 타입으로 한다. 매개변수로는 int값을 받는다.

line 6 : 리턴할 bool변수 선언 true로 초기화.

line 7 : 어떤 수의 생성자가 있는지 없는지 검사한다. n이 39면 33이 생성자인데 1~38까지 for문으로 반복하면서 검사한다.

line 8, 9 : n과 같은 값을 가지는지 검사하기 위해 sum은 본체를 더할 변수 mod는 각각 자릿수를 쪼개서 더할 변수다.

line 10~12 : 10으로 나머지 연산을 하여 각 자릿수를 sum에 더해 준다. 수를 다 쪼개서 더해주면 while문이 끝난다.

line 14 : 그 수가 생성자가 있다면 (n == sum) flag를 false로 바꾸고 for문을 나가서 flag를 리턴 시켜준다.

line 19 : false로 보내면 생성자가 있는 수이므로 메인 함수에서 출력하지 않는다. true면 for문으로 n이하의 값을 다 검사했는데 생성자가 나오지 않는 것이므로 true를 리턴 시켜 메인 함수에서 출력하게 한다.

 

반응형

댓글