[프로그래머스] 숫자 카드 나누기(135807)

lhs's avatar
Jan 08, 2025
[프로그래머스] 숫자 카드 나누기(135807)
 

1. 문제 풀이 아이디어

  • 정렬한 후 최소값 중 큰 값부터 2까지 계산하면 문제를 해결할 수 있다.

2. 나의 정답 코드

class Solution { public int solution(int[] arrayA, int[] arrayB) { Arrays.sort(arrayA); Arrays.sort(arrayB); int max = Math.max(arrayA[0], arrayB[0]); for (int i = max; i > 1; i--) { boolean check = true; for (int j = 0; j < arrayA.length; j++) { if (arrayA[j] % i != 0) { check = false; break; } } if (check) { for (int j = 0; j < arrayB.length; j++) { if (arrayB[j] % i == 0) { check = false; break; } } if (check) { return i; } } check = true; for (int j = 0; j < arrayB.length; j++) { if (arrayB[j] % i != 0) { check = false; break; } } if (check) { for (int j = 0; j < arrayA.length; j++) { if (arrayA[j] % i == 0) { check = false; break; } } if (check) { return i; } } } return 0; } }

3. 정리

  • 두 배열을 정렬한 뒤, 최소값 중 더 큰 값을 max에 저장한다.
  • max부터 2까지 반복하며, check 변수를 사용해 다음 조건을 검사한다.
    • iarrayA의 모든 요소를 나누어 떨어뜨리며, 동시에 arrayB의 어떤 요소도 나누어 떨어뜨리지 않는 경우
    • 또는, iarrayB의 모든 요소를 나누어 떨어뜨리며, 동시에 arrayA의 어떤 요소도 나누어 떨어뜨리지 않는 경우
  • 이러한 조건을 만족하는 i를 찾으면 반환하고, 찾지 못하면 0을 반환한다.
 
Share article

LHS's Study Space