자두의 데브로그

[자바] 백준 1037번 약수 본문

코딩테스트/Java

[자바] 백준 1037번 약수

왕자두 2024. 9. 22. 21:22

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

 

오랜만에 코테 공부하려니까 몬가 새롭고,, 자소서보다 재밌고,, 신선하니,, 매일 풀어야겠다 ^^

 

이 문제는 진짜 약수(1과 본인을 제외하고 남은 약수들)를 가지고 원래의 수가 어떤 수였는지를 맞추는 문제였다.

 

먼저 Collections의 sort 함수를 사용해서 정렬을 하기 위해 ArrayList로 배열을 선언하고, 배열의 길이가 짝수라면 맨 앞과 맨 뒤의 원소를 곱해주고 만약 배열의 길이가 홀수라면 가운데의 원소를 제곱해서 답을 구하면 됐다.

 

여기서 주의해야할 점은 홀수일 때, 맨 앞의 원소로 하면 안되는 게 나는 25 같이 제곱수들 중 약수가 1과 본인 포함 3개만 있는 수들만 생각해냈지만 생각해보면 모든 제곱수의 약수 개수가 3개일리는 없다. 그래서 처음에 get(0)을 제곱해서 틀렸었는데 가운데 원소로 하면 정답을 맞출 수 있다.

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;

public class Main {
    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());
        int answer = 0;

        StringTokenizer st = new StringTokenizer(br.readLine());
        ArrayList<Integer> arr = new ArrayList<>();
        for(int i = 0; i < n; i++){
            arr.add(Integer.parseInt(st.nextToken()));
        }

        Collections.sort(arr);

        if(arr.size() % 2 == 0){
            // arr의 길이가 짝수라면 맨 뒤와 맨 앞을 곱하면 해당하는 수
            answer = arr.get(0) * arr.get(arr.size()-1);
        }
        else{
            answer = arr.get(arr.size()/2) * arr.get(arr.size()/2);
        }
        bw.write(String.valueOf(answer));
        bw.flush();
        bw.close();
    }

}