출처: 프로그래머스 코딩 테스트 연습
https://school.programmers.co.kr/learn/courses/30/lessons/135807
나의 풀이
public int solution(int[] arrayA, int[] arrayB)
{
int a = GetMaxValue(arrayA, arrayB);
int b = GetMaxValue(arrayB, arrayA);
return a > b ? a : b;
}
private int GetMaxValue(int[] my, int[] other)
{
int n = my[0];
foreach(int num in my)
n = GCD(n, num);
foreach(int num in other)
{
if(num % n == 0)
return 0;
}
return n;
}
private int GCD(int a, int b)
{
if(b == 0) return a;
return GCD(b, a % b);
}
우선 문제해석
철수가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고 -> 최소공배수
영희가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 -> 완전탐색으로 하나씩 비교
영희 철수를 반대로 한번 더 구해서 둘 중 큰 것을 반환하면 된다.
여러 수의 최소 공배수는 반복문으로 1번숫자, 2번 숫자의 공배수 구하고,
나온 수를 다시 3번이랑 공배수구하고 하는 식으로 구할 수 있다.
단순 반복문 돌렸을 때 시간초과가 나겠지 싶어서 그냥 풀었는데 의외로 그냥 통과.
최소 공배수 공식인 유클리드 호재법은 개념은 숙지해도 코드는 까먹기 쉬우니 다시 체크.
private int GCD(int a, int b)
{
if(b == 0) return a;
return GCD(b, a % b);
}
private int GCD(int a, int b)
{
int c;
while(b != 0)
{
c = a % b;
a = b;
b = c;
}
return a;
}
'🛡️ 코딩테스트 > 🛡️ 코테 : 프로그래머스' 카테고리의 다른 글
C# 테이블 해시 함수 - 정렬 / 프로그래머스 [Lv.2] (0) | 2023.04.02 |
---|---|
C# 혼자 놀기의 달인 - 완전탐색 / 프로그래머스 [Lv.2] (0) | 2023.04.01 |
C# 호텔 대실 - 그리디 / 프로그래머스 [Lv.2] (0) | 2023.03.30 |
C# 마법의 엘리베이터 - DFS / 프로그래머스 [Lv.2] (0) | 2023.03.29 |
C# 하노이의 탑 - 재귀 / 프로그래머스 [Lv.2] (0) | 2023.03.28 |