본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 1037 약수

by 까망 하르방 2021. 8. 24.
반응형

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

Approach

진짜 약수 의미를 고려하면 쉽게 구현할 수 있다.

ex) A = 20 일 때, 20의 약수는 [1, 2, 4, 5, 10, 20] 이다.

    이때, 진짜 약수는 [2, 4, 5, 10]인데 → (2 × 10) 혹은 (4 × 5)

여러 약수 조합 중에서 최소값과 최대값에 해당되는 원소로 곱해주면 된다.

 

주어지는 진짜 약수를 배열에 저장해서 정렬한 뒤, → sort() 이용

첫번째/마지막 원소가 최소값/최대값에 해당된다.

 

구현할 때, 진짜 약수가 1개인 경우도 주의해야 한다.

ex) 9의 진짜약수는 [3] 이기 때문에 최소/최대값이 동일하다.

(32비트 부호있는 정수 조건이므로 int 표현이 가능하다.)

 

C++

#include <iostream>
#include <algorithm>

using namespace std;

const int MAX_N = 50 + 2;
int N, arr[MAX_N];
int main() 
{
	// freopen("input.txt", "r", stdin);
	cin >> N;
	for (int i = 0; i < N; i++)
	{
		scanf("%d", arr + i);
	}

	sort(arr, arr + N);

	// 최소값 * 최대값
	cout << arr[0] * arr[N - 1] << endl;
}

 

Java

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int T = Integer.parseInt(sc.next());
        
        List<Integer> list = new ArrayList<>();
        
        while(T-- > 0) {
        	list.add(Integer.parseInt(sc.next()));
        }
        
        Collections.sort(list);
        
        int max = list.get(list.size()-1);
        int min = list.get(0);
        
        System.out.println(max * min);
    }
}
반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 1094 막대기  (0) 2021.08.26
[BOJ] 백준 1085 직사각형에서 탈출  (0) 2021.08.25
[BOJ] 백준 1032 명령 프롬프트  (0) 2021.08.23
[BOJ] 백준 1026 보물  (0) 2021.08.22
[BOJ] 백준 12101 1, 2, 3 더하기 2  (0) 2021.08.10

댓글