728x90
코드 힌트:
- 정렬 후 비교:
- 두 배열 A와 B를 오름차순으로 정렬한 후, 각 요소를 비교합니다.
- 이렇게 하면 최소한의 연산으로 이길 수 있는 경우를 최대화할 수 있습니다.
- 두 포인터 방식:
- 이 코드는 두 포인터 방식(two-pointer technique)을 사용합니다.
- 두 배열을 동시에 순회하면서 비교하여 A의 카드를 사용하여 B의 카드를 이길 수 있는지를 판단합니다.
- 이 방식은 시간 복잡도를 줄이는 데 효과적입니다.
- 반복문 구조:
- while 반복문은 B 배열의 끝에 도달할 때까지 진행되며, A 배열의 현재 카드가 B 배열의 현재 카드보다 작은 경우에만 result를 증가시킵니다.
- 이로써 A의 카드가 B의 카드보다 많은 경우에도 처리할 수 있습니다.
정답은 더보기 클릭
더보기
import java.util.*;
class Solution {
public int solution(int[] A, int[] B) {
int result = 0; // 이길 수 있는 매치 수를 저장하는 변수
// 배열 A와 B를 오름차순으로 정렬합니다.
Arrays.sort(A);
Arrays.sort(B);
int aIdx = 0; // 배열 A의 인덱스를 추적
int bIdx = 0; // 배열 B의 인덱스를 추적
// 배열 B의 모든 요소를 검사할 때까지 루프를 실행합니다.
while (bIdx < B.length) {
// 현재 A의 카드가 B의 카드보다 작으면 이길 수 있으므로,
// aIdx와 bIdx를 증가시키고 결과를 증가시킵니다.
if (A[aIdx] < B[bIdx]) {
result++;
aIdx++; // A의 다음 카드로 이동
}
bIdx++; // B의 다음 카드로 이동 (승패 여부와 상관없이)
}
// 이길 수 있는 매치의 총 개수를 반환합니다.
return result;
}
}
728x90
'프로그래머스(Java) > Level 3' 카테고리의 다른 글
[프로그래머스] 단속카메라 (0) | 2024.09.05 |
---|---|
[프로그래머스] 최고의 집합 (0) | 2024.09.03 |
[프로그래머스] 베스트앨범 (1) | 2024.09.02 |
[프로그래머스] 등굣길 (0) | 2024.08.22 |
[프로그래머스] N으로 표현 (0) | 2024.08.21 |