코딩테스트/프로그래머스

[프로그래머스]N개의 최소공배수 - Java

GAEBAL 2022. 9. 18. 21:23
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12953

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이

쉬운 문제임

 

다른 사람보니까 유클리드 호제법으로도 풀었던데 나는 다른 방법으로 풀었음 !

배열을 정렬해서 가장 큰 수를 뽑아준 다음에 걔를 기준으로 배열을 돌면서 모두의 최소공배수가 맞는지 확인했음!
그리고 그 뽑아준 애를 1배, 2배, 3배, ... 하면서 모두의 최소공배수를 구할 때까지 숫자를 증가시켜줌

 

자세한건 주석으로 !

 

 

코드

// 코딩테스트 연습 - 연습문제 - N개의 최소공배수
// https://school.programmers.co.kr/learn/courses/30/lessons/12953

package PROGRAMMERS.level2;

import java.util.Arrays;

public class Num12953_N개의최소공배수 {
    private static class Solution {
        private int solution(int[] arr) {
            Arrays.sort(arr); // 정렬

            // 제일 마지막 원소가 제일 크기 때문에 걔를 기준으로 비교할 예정
            int standard = arr[arr.length - 1];

            while (true) {
                // 아까 뽑은거 14면 처음엔 14로  다 비교하고 그담엔 28, 42
                standard += arr[arr.length - 1];

                // 제일 처음 맞는애가 최소니까 바로 check()가 true를 반환하면
                // 바로 standard를 리턴
                if (check(standard, arr)) {
                    return standard;
                }
            }
        }

        // 배열의 원소를 돌면서 공배수가 맞는지 확인
        private static boolean check(int standard, int[] arr) {
            for (int i = 0; i < arr.length; i++) {
                if (standard % arr[i] != 0) {
                    return false; // 아니면 중간에 false 반환
                }
            }
            return true; // 맞으면(for문을 끝까지 돌면) true
        }
    }

    public static void main(String[] args) {
        Solution sol = new Solution();

        System.out.println(sol.solution(new int[]{2, 6, 8, 14}));
        System.out.println(sol.solution(new int[]{1, 2, 3}));
    }
}
728x90