본문 바로가기
공부 정리/백준

[백준] 자바 1037 약수

by 경적필패. 2021. 8. 11.
반응형

문제

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

입력

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

출력

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


테스트 케이스

 

2

4 2

-->8

 

4

2 5 4 10

-->20

 


접근

1.진짜 약수의 개수를 입력 받음

(진짜 약수란 20을 예로 들면 1,2,4,5,10,20 중 1과 본 수인 20을 뺀 2,4,5,10을 의미함)

2. 진짜 약수들을 입력 받음(순서 상관 x)

(위에서 말한 2,4,5,10을 입력 받음 4,5,10,2처럼 순서와 상관없이 입력됨)

 

순서와 상관없이 입력되므로 일단 저는 리스트에 넣어주어 정렬을 먼저 해주었습니다.

ex) 20의 진짜약수들을 2,4,5,10 순으로 정렬

진짜 약수의 처음수와 마지막 수를 곱하면 본래의 수를 구할 수 있기 때문에 이를 이용하여 구현했더니 문제가 해결되었습니다.

^ - ^


코드

import java.awt.desktop.SystemEventListener;
import java.io.*;
import java.math.*;
import java.util.*;

public class Main {

	/*
 	 1037 problem
	*/

	
	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int num = Integer.parseInt(br.readLine());
		ArrayList<Integer> list = new ArrayList<>();
		StringTokenizer st = new StringTokenizer(br.readLine());
		//입력받음
		for(int i=0; i<num; i++) {
			list.add(Integer.parseInt(st.nextToken()));
		}
		//정렬
		Collections.sort(list);
		bw.write(String.valueOf(list.get(0)*list.get(num-1)));
		
		bw.flush();
		br.close();
		bw.close();
	}
}

주의

소수는 제외

 

반응형

댓글