Skip to content

Commit df3bb4b

Browse files
committed
[level 2] Title: 숫자 카드 나누기, Time: 1065.33 ms, Memory: 136 MB -BaekjoonHub
1 parent f8883c0 commit df3bb4b

File tree

2 files changed

+153
-0
lines changed

2 files changed

+153
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# [level 2] 숫자 카드 나누기 - 135807
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/135807)
4+
5+
### 성능 요약
6+
7+
메모리: 136 MB, 시간: 1065.33 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 연습문제
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2025년 08월 22일 10:27:55
20+
21+
### 문제 설명
22+
23+
<p>철수와 영희는 선생님으로부터 숫자가 하나씩 적힌 카드들을 절반씩 나눠서 가진 후, 다음 두 조건 중 하나를 만족하는 <u>가장 큰 양의 정수 a</u>의 값을 구하려고 합니다.</p>
24+
25+
<ol>
26+
<li>철수가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고 영희가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a</li>
27+
<li>영희가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고, 철수가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a</li>
28+
</ol>
29+
30+
<p>예를 들어, 카드들에 10, 5, 20, 17이 적혀 있는 경우에 대해 생각해 봅시다. 만약, 철수가 [10, 17]이 적힌 카드를 갖고, 영희가 [5, 20]이 적힌 카드를 갖는다면 두 조건 중 하나를 만족하는 양의 정수 a는 존재하지 않습니다. 하지만, 철수가 [10, 20]이 적힌 카드를 갖고, 영희가 [5, 17]이 적힌 카드를 갖는다면, 철수가 가진 카드들의 숫자는 모두 10으로 나눌 수 있고, 영희가 가진 카드들의 숫자는 모두 10으로 나눌 수 없습니다. 따라서 철수와 영희는 각각 [10, 20]이 적힌 카드, [5, 17]이 적힌 카드로 나눠 가졌다면 조건에 해당하는 양의 정수 a는 10이 됩니다.</p>
31+
32+
<p>철수가 가진 카드에 적힌 숫자들을 나타내는 정수 배열 <code>arrayA</code>와 영희가 가진 카드에 적힌 숫자들을 나타내는 정수 배열 <code>arrayB</code>가 주어졌을 때, 주어진 조건을 만족하는 가장 큰 양의 정수 a를 return하도록 solution 함수를 완성해 주세요. 만약, 조건을 만족하는 a가 없다면, 0을 return 해 주세요.</p>
33+
34+
<hr>
35+
36+
<h5>제한사항</h5>
37+
38+
<p>제한사항</p>
39+
40+
<ul>
41+
<li>1 ≤ <code>arrayA</code>의 길이 = <code>arrayB</code>의 길이 ≤ 500,000</li>
42+
<li>1 ≤ <code>arrayA</code>의 원소, <code>arrayB</code>의 원소 ≤ 100,000,000</li>
43+
<li><code>arrayA</code>와 <code>arrayB</code>에는 중복된 원소가 있을 수 있습니다.</li>
44+
</ul>
45+
46+
<hr>
47+
48+
<h5>입출력 예</h5>
49+
<table class="table">
50+
<thead><tr>
51+
<th>arrayA</th>
52+
<th>arrayB</th>
53+
<th>result</th>
54+
</tr>
55+
</thead>
56+
<tbody><tr>
57+
<td>[10, 17]</td>
58+
<td>[5, 20]</td>
59+
<td>0</td>
60+
</tr>
61+
<tr>
62+
<td>[10, 20]</td>
63+
<td>[5, 17]</td>
64+
<td>10</td>
65+
</tr>
66+
<tr>
67+
<td>[14, 35, 119]</td>
68+
<td>[18, 30, 102]</td>
69+
<td>7</td>
70+
</tr>
71+
</tbody>
72+
</table>
73+
<hr>
74+
75+
<h5>입출력 예 설명</h5>
76+
77+
<p><strong>입출력 예 #1</strong></p>
78+
79+
<ul>
80+
<li>문제 예시와 같습니다.</li>
81+
</ul>
82+
83+
<p><strong>입출력 예 #2</strong></p>
84+
85+
<ul>
86+
<li>문제 예시와 같습니다.</li>
87+
</ul>
88+
89+
<p><strong>입출력 예 #3</strong></p>
90+
91+
<ul>
92+
<li>철수가 가진 카드에 적힌 숫자들은 모두 3으로 나눌 수 없고, 영희가 가진 카드에 적힌 숫자는 모두 3으로 나눌 수 있습니다. 따라서 3은 조건에 해당하는 양의 정수입니다. 하지만, 철수가 가진 카드들에 적힌 숫자들은 모두 7로 나눌 수 있고, 영희가 가진 카드들에 적힌 숫자는 모두 7로 나눌 수 없습니다. 따라서 최대값인 7을 return 합니다.</li>
93+
</ul>
94+
95+
96+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public int solution(int[] arrayA, int[] arrayB) {
5+
6+
// 정렬
7+
Arrays.sort(arrayA);
8+
Arrays.sort(arrayB);
9+
10+
int a = arrayA[0];
11+
int b = arrayB[0];
12+
13+
int curNum = 2;
14+
int maxA = 0;
15+
while(curNum <= a){
16+
// A의 모든 숫자를 나누고 B의 모든 숫자를 못나눔
17+
if(canDivisionAll(curNum,arrayA) && cantDivisionAny(curNum,arrayB)) {
18+
maxA = curNum;
19+
}
20+
curNum ++;
21+
}
22+
23+
curNum = 2;
24+
int maxB = 0;
25+
while(curNum <= b){
26+
// B의 모든 숫자를 나누고 A의 모든 숫자를 못나눔
27+
if(canDivisionAll(curNum,arrayB) && cantDivisionAny(curNum,arrayA)){
28+
maxB = curNum;
29+
}
30+
curNum ++;
31+
}
32+
33+
return Math.max(maxA,maxB);
34+
}
35+
36+
// 모든 숫자를 나눌 수 있음
37+
boolean canDivisionAll(int number,int[] array){
38+
for(int i=0;i<array.length; i++){
39+
int number2 = array[i];
40+
if(number2%number != 0){
41+
return false;
42+
}
43+
}
44+
return true;
45+
}
46+
47+
// 어느 숫자도 못나눔
48+
boolean cantDivisionAny(int number,int[] array){
49+
for(int i=0;i<array.length; i++){
50+
int number2 = array[i];
51+
if(number2%number == 0){
52+
return false;
53+
}
54+
}
55+
return true;
56+
}
57+
}

0 commit comments

Comments
 (0)