백준 문제풀이

[Baekjoon 1037] 약수 - JAVA

planting grass 2023. 8. 1. 06:42
728x90

[Bronze I] 약수 - 1037

문제 링크

성능 요약

메모리: 14264 KB, 시간: 124 ms

분류

수학, 정수론

문제 설명

양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다.

출력

첫째 줄에 N을 출력한다. N은 항상 32비트 부호있는 정수로 표현할 수 있다.

문제 풀이

문제를 풀때 한가지만 생각하고 풀면 된다.

최소공배수로 구하면 안된다.

문제에서 "어떤 수 N의 진짜 약수가 모두 주어질 때" 라고 적혀있다.

예를 들자면 N = 20인 경우 입력에 (2, 4, 5, 10)이 들어온다.

하지만 최소공배수로 구하게 된다면 2가 입력에 들어올 수 없게 된다.

이런것을 사실 고려할 필요는 없다...

해당 문제는 그냥 입력의 최소, 최대값을 곱하면 답이 나오기 때문이다...!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int T = Integer.parseInt(br.readLine());

        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        while (T-- > 0) {
            int N = Integer.parseInt(st.nextToken());
            max = Math.max(N, max);
            min = Math.min(N, min);
        }
        System.out.println(max * min);
    }
}

코드 풀이

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
  • T를 입력 받고, BufferedReader를 사용하여 br 객체를 생성한다.
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
  • 최대값과 최소값을 저장하는 변수 maxmin을 각각 Integer.MIN_VALUEInteger.MAX_VALUE로 초기화한다.
    이렇게 초기화하면 입력 받은 첫 번째 숫자가 반드시 maxmin이 된다.
        while (T-- > 0) {
            int N = Integer.parseInt(st.nextToken());
            max = Math.max(N, max);
            min = Math.min(N, min);
        }
  • T의 값이 0보다 크면 반복한다.
    입력받은 개수 T에 따라 반복하면서 숫자들을 비교하여 최대값과 최소값을 갱신한다.

  • 최대값과 최소값 갱신: Math.max()를 사용하여 Nmax를 비교하여 더 큰 값을 max에 저장한다.
    Math.min()을 사용하여 Nmin을 비교하여 더 작은 값을 min에 저장한다.

        System.out.println(max * min);
    }
}
  • 최대값과 최소값을 곱한 결과를 출력한다.
728x90