Backend
home
🔢

[백준] 약수

생성일
2025/03/13 13:55
태그
BaekJoon
게시일
2025/03/13
최종 편집 일시
2025/03/14 02:37

문제

해결 방안 고민

어떤 수 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
복사