알고리즘/프로그래머스

[프로그래머스] 숫자 게임 Java 풀이 및 해설

승민아 2024. 5. 6. 09:27

https://school.programmers.co.kr/learn/courses/30/lessons/12987#qna

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 방법

최대 점수를 얻기 위해서

상대가 내는 숫자 카드이상이면서 최대한 가까운 숫자 카드를 내야한다.

그래야지 내가 가진 큰 숫자의 카드는 또 다른 상대의 큰 숫자 카드를 이기는데 사용할 수 있기 때문이다.

 

A와 B의 숫자 카드를 오름차순으로 정렬한다.

A의 숫자 카드를 반복문으로 끝에서부터 돈다.

그럼 A가 가진 가장 큰 숫자 카드순으로 반복문을 돌텐데

이때 B가 가진 가장 큰 숫자의 카드와 비교하며 점수를 계산하면 된다.

B가 이길 수 있는 경우 해당 카드(idx번째)는 승부를 위해 사용한다. (사용시 idx 감소)

이길 수 없는 경우는 최소값의 카드를 사용해서 패배했다고 가정하면 된다.

 

전체 코드

import java.util.*;
class Solution {
    public int solution(int[] A, int[] B) {
        int answer = 0;
        Arrays.sort(A);
        Arrays.sort(B);
        int idx = B.length-1;
        for(int i=A.length-1; i>=0; i--) {
            if(A[i] < B[idx]) {
                answer++;
                idx--;
            }
        }
        return answer;
    }
}