본문 바로가기

프로그래머스(Java)/Level 3

[프로그래머스] 숫자 게임

728x90

코드 힌트:

  1. 정렬 후 비교:
    • 두 배열 A와 B를 오름차순으로 정렬한 후, 각 요소를 비교합니다.
    • 이렇게 하면 최소한의 연산으로 이길 수 있는 경우를 최대화할 수 있습니다.
  2. 두 포인터 방식:
    • 이 코드는 두 포인터 방식(two-pointer technique)을 사용합니다.
    • 두 배열을 동시에 순회하면서 비교하여 A의 카드를 사용하여 B의 카드를 이길 수 있는지를 판단합니다.
    • 이 방식은 시간 복잡도를 줄이는 데 효과적입니다.
  3. 반복문 구조:
    • 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