기록

프로그래머스_java_숫자 카드 나누기 본문

코딩테스트/Java

프로그래머스_java_숫자 카드 나누기

youngyin 2023. 10. 7. 20:49

문제

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

 

프로그래머스

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

programmers.co.kr

풀이

  • 유클리드 호제법

두 정수의 최대공약수(GCD)를 구하는 방법으로, 두 수를 나누고 나머지를 구하며 반복하여 0이 나올 때까지 계산합니다. 나온 0이 아닌 나머지가 GCD가 됩니다.

코드

import java.util.*;

class Solution {
    public int solution(int[] arrayA, int[] arrayB) {
        /*모든 숫자를 나눌 수 있고*/
        int gcdA = gcd(arrayA);
        int gcdB = gcd(arrayB);

        /*모든 숫자들 중 하나도 나눌 수 없는지*/
        int ans = 0;
        if (check(arrayA, gcdB)) ans = Math.max(ans, gcdB);
        if (check(arrayB, gcdA)) ans = Math.max(ans, gcdA);
        return ans;
    }
    
    /*모든 숫자들 중 하나도 나눌 수 없는지*/
    private boolean check(int[] arr, int gcd){
        for (int i:arr){
            if (i%gcd==0) return false;
        }
        return true;
    }

    private int gcd(int[] arr){
        return Arrays.stream(arr).reduce(arr[0], (a, b)->gcd(a, b));
    }

    private int gcd(int a, int b){
        if (a%b == 0) return b;
        return gcd(b, a%b);
    }
}

'코딩테스트 > Java' 카테고리의 다른 글

백준_Java_14719_빗물  (0) 2025.01.03
프로그래머스_Java_시소짝꿍  (0) 2023.10.18
프로그래머스_Java_테이블 해시 함수  (0) 2023.10.11
백준_9663_N-Queen  (0) 2020.09.01
백준_18119_단어 암기  (0) 2020.09.01
Comments