프로그래머스

C# - 숫자 카드 나누기

ybbro 2023. 1. 4. 15:25
using System;
using System.Linq;

public class Solution {
    public int solution(int[] arrayA, int[] arrayB) {
        int answer = 0;
        
        // 1부터 배열A의 0번째 원소까지
        for(int i = 1;i <= arrayA[0]; i++)
        {
            // 0번째 원소가 나누어 떨어지지 않는 경우, 다음 수로
            if(arrayA[0] % i != 0)
               continue;
            
            // 0번째 원소가 나누어 떨어지는 수에 대해
            var div = arrayA[0] /i;
            
            // 배열A의 모든 수가 나누어 떨어지고,
            // 배열B의 모든 수가 나누어 떨어지지 않고,
            // 이전에 나온 해보다 큰 경우에만
            // 새로운 해를 지정하고 루프를 빠져나감
            if(arrayA.All(a => a % div == 0)
               && arrayB.All(b => b % div != 0)
               && answer < div)
            {
               answer = div;
               break;   
            }
        }

        // 배열 B에 대해서도 위와 같은 과정을 실행
        for(int i = 1;i <= arrayB[0]; i++)
        {
            if(arrayB[0] % i != 0)
               continue;
            var div = arrayB[0] /i;
            if(arrayA.All(a => a % div != 0)
               && arrayB.All(b => b % div == 0)
               && answer < div)
            {
               answer = div;
               break;   
            }
        }

        return answer;
    }
}