PS/백준

[백준/1037번/java] - 약수

정코딩딩 2024. 3. 17. 23:51

import java.util.Scanner;

public class Main {
    /**
     * 1. int[] 배열 몇개 만들지 입력받아서 num 에 저장
     * 2. 배열에 저장하기
     * 3. for 문으로 배열 돌면서 최대 최소 찾기
     * 4. 최대 * 최소 = 정답
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int num = scan.nextInt();
        int[] arr = new int[num];

        for(int i = 0; i < num; i++){
            arr[i] = scan.nextInt();
        }

        int min = arr[0];
        int max = arr[0];

        for(int j =0; j < num; j++){
            if(arr[j] >= max){
                max = arr[j];
            }
            if(arr[j] < min){
                min = arr[j];
            }
        }

        int result = min * max;
        System.out.println(result);
    }
}

 

문제를 읽고 내가 어떤 순서로 코드를 짤지 먼저 생각 정리를 해본 후에 코딩을 해보았다.

먼저 첫줄에 몇개의 수를 입력받을 건지 입력받으므로 해당 크기만큼의 int 배열을 만들어주었다.

그리고 scanner 로 배열에 숫자 하나씩 저장한다.

for 문으로 배열을 순회하면서 min, max 값과 비교하면서 갱신시킨다.

for 문을 돌고 나오면 배열에서 가장 작은 값이 min 에, 가장 큰 값이 max 에 저장되어있을 것이다.

 

우리가 약수를 구하는 과정을 생각해보자!

내가 최소값과 최대값을 구한 이유에 대해 알 수 있다.

 

6의 약수를 구하는 과정을 생각해보자.

6

= 1 x 6

= 2 x 3

 

이런식이다. 약수는 1, 2, 3, 6 이고 어떤 수의 약수인지 알려면 가장 작은 수와 가장 큰 수를 곱해서 알 수 있다.

따라서 내가 for 문에서 구한 최솟값과 최댓값 둘을 곱하면 N 이 나오게 된다.