문제
해결 방안 고민
•
어떤 수 N의 진짜 약수가 모두 주어질 때 → 이 부분이 중요하다.
•
처음에는 정렬을 하고 제일 큰 수가 짝수이면 2를 곱하고 홀수이면 제곱을 하면 되는 줄 알았다.
◦
하지만 이렇게 접근하면 오답이다. 일부의 답만을 맞추기 위한 임시 방편이기 때문이다.
해결 방법
•
입력으로 들어오는 값 중 최솟값과 최댓값을 서로 곱하면 끝난다.
◦
난 이 부분을 정렬을 활용하여 첫 번째 요소와 마지막 요소를 곱해서 해결했다.
•
예를 들어 N = 20일 경우 다음과 같이 들어올 것이다.
◦
2, 4, 5, 10… 그 외의 입력은 들어올 수 없다.
◦
2, 4, 5 이런 식으로는 입력 자체가 들어올 수 없다.
코드
•
코드 1
package algo250313;
// 백준 - 약수
/*
양수 A가 N의 진짜 약수가 되려면,
N이 A의 배수이고,
A가 1과 N이 아니어야 한다.
어떤 수 N의 진짜 약수가 모두 주어질 때,
N을 구하는 프로그램 작성
*/
import java.io.*;
import java.util.*;
public class Baek1037 {
public static void main(String[] args) throws IOException {
int answer = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int[] arr = new int[N];
int length = arr.length;
for (int i = 0; i < length; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
answer = arr[0] * arr[length - 1];
System.out.println(answer);
}
}
Java
복사
•
코드 2
package algo250313;
// 백준 - 약수
/*
양수 A가 N의 진짜 약수가 되려면,
N이 A의 배수이고,
A가 1과 N이 아니어야 한다.
어떤 수 N의 진짜 약수가 모두 주어질 때,
N을 구하는 프로그램 작성
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Baek1037_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int[] arr = new int[N];
int length = arr.length;
for (int i = 0; i < length; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
bw.write(String.valueOf(arr[0] * arr[length - 1]));
bw.flush();
bw.close();
br.close();
}
}
Java
복사
•
코드 3 - 배열을 활용하지 않고도 해결할 수 있는 방법이 있었다
package algo250313;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 백준 - 약수, 배열 사용 X
// 단순히 최소공배수로 구하면 안 됨
// 입력으로 들어오는 최솟값과 최댓값을 서로 곱하면 된다.
public class Baek1037_3 {
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);
}
}
Java
복사