미소를뿌리는감자의 코딩

[백준 2024/01/20] 1037번 약수 본문

코딩 테스트/백준

[백준 2024/01/20] 1037번 약수

미뿌감 2024. 1. 20. 13:08
728x90

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

 

1037번: 약수

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

www.acmicpc.net

 

1. 접근 방법

이번 문제는 어떤 수(n)의 약수를 주어주고, n을 구하는 문제였다.

약수들을 쭉 보면서 드는 생각으로, 어떤 수는 어떤 수와 곱해졌을 때, n이 만들어지는구나 였다.

 

여기서 그 어떤수가 주어진 값들 중에서 최대 값이었다면, 그 최대 값의 짝은 주어진 값들 중 최소 값이겠구나 라고 생각이 들었다.

따라서, 주어진 값들 중에서 최소 값과 최대 값을 곱하여 출력하도록 코딩을 시작하였다.

 

만약 주어진 값이 한개라면, 찾고자 하는 n은 주어진 값의 제곱이 될 것이라고 생각하였다.

만약

1

3

이 주어졌을 때, 찾고자 하는 값은 9가 될 것이며,

1

5

라면, 찾고자 하는 값은 25가 될 것이다.

 

따라서 이를 바탕으로 코드를 작성하였다.

rough draft

2. 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;


public class b1037 {
    public static void main(String[] args) throws IOException {
        List<Integer> list = new ArrayList<>();

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int numbs = Integer.parseInt(reader.readLine());
        String num_s = reader.readLine();
        String[] numString = num_s.split("\\s+");

        for(int i = 0; i<numbs;i++){
            list.add(Integer.parseInt(numString[i]));
        }

        if(numbs==1){
            System.out.println((int)Math.pow(list.get(0),2));
        }
        else{
            System.out.println(Collections.max(list)*Collections.min(list));
        }

    }

}
728x90