문제 출처: https://www.acmicpc.net/problem/1037
양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다.
6
3 4 2 12 6 8
출력
첫째 줄에 N을 출력한다. N은 항상 32비트 부호있는 정수로 표현할 수 있다.
24
import java.io.*;
public class Main {
public static void main (String args []) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
br.readLine();
String [] input = br.readLine().split(" ");
int max = 0;
int min = Integer.MAX_VALUE;
for(int i = 0; i < input.length; i++) {
int temp = Integer.parseInt(input[i]);
max = temp > max ? temp : max;
min = temp < min ? temp : min;
}
bw.write(max * min + "");
bw.flush();
bw.close();
br.close();
}
}
주어진 숫자의 max와 min을 찾아서 곱해버리면 끝이다.
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 N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] soo = new int[N];
int max = -1;
int min = 1000001;
for(int i=0;i<N;i++) {
soo[i] = Integer.parseInt(st.nextToken());
max = (max > soo[i]) ? max : soo[i];
min = (min < soo[i]) ? min : soo[i];
}
System.out.println(max*min);
}
}
내 코드보다 빨라서 봤는데 내가 split() 함수를 써서 조금 더 속도가 늦엇던거같다. 안쓰고도 이렇게 가능하다.