본문 바로가기
Algorithm/PROGRAMMERS[Java]

Lv2. N개의 최소공배수

by 씨니 2022. 6. 18.
728x90

▶ 문제

 

▶ 풀이방법

import java.util.*;
class Solution {
    public int solution(int[] arr) {
        int answer = 1;
        Arrays.sort(arr);
        
        //소수판별 - 에라토스테네스의 체
        boolean[] ck = new boolean[101];
        for(int i = 2; i < ck.length; i++) {
            for(int j = i*i; j < ck.length; j += i) {
                if(ck[j] == false) ck[j] = true; //소수가 아니라면 true
            }
        }

        ArrayList<Integer> list = new ArrayList<>(); //배열 내 수들의 소수저장.
        for(int i = 0; i < arr.length; i++) {
            for(int l : list) {
                if(arr[i] % l == 0) arr[i] /= l;
            }
            if(ck[arr[i]] == false) { //소수일 경우
                list.add(arr[i]); //list에 저장
            }else {
                while(arr[i] > 1) {
                    if(arr[i] % 2 == 0) {
                        list.add(2);
                        arr[i] /= 2;
                    }else if(arr[i] % 3 == 0) {
                        list.add(3);
                        arr[i] /= 3;
                    }else if(arr[i] % 5 == 0) {
                        list.add(5);
                        arr[i] /= 5;
                    }else if(arr[i] % 7 == 0) {
                        list.add(7);
                        arr[i] /= 7;
                    }
                }
            }
        }

        for(int l : list) { //list에 저장된 수들의 곱
            answer *= l;
        }
        
        return answer;
    }
}

728x90