백준/단계별로 풀어보기

백준 - 단계별로 풀어보기 - JAVA (5단계 : 함수 / 3문제) (2022.12.25 일)

MoveForward 2022. 12. 25. 02:07

1단계 : 15596번 / 정수 N개의 합

총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오.

  • Java: long sum(int[] a); (클래스 이름: Test)
    • a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)
    • 리턴값: a에 포함되어 있는 정수 n개의 합
public class Test {
    long sum(int[] a){
        long sum = 0;
        for (int i=0; i<a.length; i++){
            sum += a[i];
        }
        return sum;
    }
}

 


2단계 : 4673번 / 셀프 넘버

public class Main{
    public static void main(String args[]){

        boolean[] check = new boolean[10001];

        for(int i=1; i<10001; i++){
            int a = d(i);

            if (a < 10001){
                check[a] = true;
            }
        }
        for(int i=1; i<10001; i++){
            if (!check[i]){
                System.out.println(i);
            }
        }
    }

    public static int d(int n){
        int sum = n;

        while (n != 0){
            sum += (n%10);
            n = n/10;
        }
        return sum;
    }
}

 

** 1~10000까지의 수를 생성자로 하여 다음 숫자를 도출하는 함수 => d()

d()를 사용하여 1~10000까지 생성자를 가지는 숫자들을 boolean 배열을 통해 표시한다.

"표시되지 않은 숫자 = 셀프 넘버" 해당 숫자들을 출력한다. 


3단계 : 1065번 / 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 

import java.util.Scanner;

public class Main{
    public static void main(String args[]){

        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();

        boolean[] check = new boolean[N+1]; // 1~N까지 check 공간
        int count = 0;

        for (int i=1; i<N+1; i++){
            check[h(i)] = true;
        }
        for(int i=1; i<N+1; i++){
            if (check[i] == true){
                count ++;
            }
        }
        System.out.println(count);
    }
    public static int h(int n){

        // 세자리 수 인 경우
        if (n > 99){
            int k = n;
            int a = k%10; // 일의 자리수
            k = k/10;
            int b = k%10; // 십의 자리수
            int c = k/10; // 백의 자리수
            if ((c-b)==(b-a)){
                return n;
            } else{return 0;}
        }
        else{ return n;} // 한 자리, 두 자리인 경우
    }
}

 

n이 1~99까지인 경우는 모두 한수 이다.

왜냐하면 1~9인 경우는 길이가 1인 수열이므로 9개 모두 한수이고,

10~99는 길이가 2인 수열인데, 예를 들어 50의 경우 첫항이 5, 마지막항이 0,이고 공차가 -5인 등차수열이라고 할수있기 때문이다. 자세한 설명참고는 아래 링크를 통해 확인할 수 있다.

https://www.acmicpc.net/board/view/25689

 

글 읽기 - 문제 이해가 안됩니다

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net