백준 문제풀이
[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(), " ");
- 최대값과 최소값을 저장하는 변수
max
와min
을 각각Integer.MIN_VALUE
와Integer.MAX_VALUE
로 초기화한다.
이렇게 초기화하면 입력 받은 첫 번째 숫자가 반드시max
와min
이 된다.
while (T-- > 0) {
int N = Integer.parseInt(st.nextToken());
max = Math.max(N, max);
min = Math.min(N, min);
}
T
의 값이 0보다 크면 반복한다.
입력받은 개수T
에 따라 반복하면서 숫자들을 비교하여 최대값과 최소값을 갱신한다.최대값과 최소값 갱신:
Math.max()
를 사용하여N
과max
를 비교하여 더 큰 값을max
에 저장한다.Math.min()
을 사용하여N
과min
을 비교하여 더 작은 값을min
에 저장한다.
System.out.println(max * min);
}
}
- 최대값과 최소값을 곱한 결과를 출력한다.
728x90