지구정복

[수학] 백준 - 약수 본문

데이터 엔지니어링 정복/Algorithm

[수학] 백준 - 약수

eeaarrtthh 2021. 8. 19. 12:01
728x90
반응형

https://www.acmicpc.net/problem/1037

 

1037번: 약수

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

www.acmicpc.net

 

-문제해설

처음에 입력받은 약수들을 반복문 돌리면서 최소공배수를 구하면되는 건가 했지만 최소공배수가 원래의 값과 다를 수 있는 경우가 있다.

 

예를 들면

32의 경우

입력되는 약수는 2 4 8 16 인데 여기서 최소공배수는 16이 되어버린다.

그래서 고민하다가 그냥 입력받은 약수 중에서 최소값과 최대값을 곱해버리면 원래의 값이 되기 때문에 

이를 이용해서 구현했더니 정답이었다 ㅎ

 

32의 경우 2*16

50의 경우 2*25

8의 경우 2*4

 

 

-자바

package math;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BJ1037 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		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 max = Integer.MIN_VALUE;
		int min = Integer.MAX_VALUE;
		int tmp;
		for( int i=0; i<n; i++ ) {
			tmp = Integer.parseInt( st.nextToken() );
			min = Math.min( tmp, min );
			max = Math.max( tmp, max );
			arr[i] = tmp;
		}
		System.out.println( min*max );
	}
}

 

-파이썬

from sys import stdin
input = stdin.readline
n = int( input().rstrip() )
arr = list( map(int, input().split()) )
print( min(arr)*max(arr) )
728x90
반응형
Comments