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

adultlee·2023년 6월 7일
0
post-custom-banner

문제 링크

프로그래머스 문제

풀이

이중포인터를 이용하여 B가 가장 많이 이길 수 있어야 한다.

우선 두개의 배열을 모두 정렬해준다.
그 이후 while문에서 이중 포인터로 이동한다.

여기서 발생하는 경우는 크게 두가지이다.
1. A가 더 크다 -> 이때, B의 index는 고정하고 A가 더 작아질 때까지 이동한다.
2. B가 더 크다 -> 이때, A와 B의 index를 모두 이동하며, answer를 추가한다.

코드

function solution(A, B) {
    var answer = 0
    A.sort((a,b) => b-a)
    B.sort((a,b) => b-a)
    
    
    // 이중 포인터로 이동시킨다. 
    let i =0; // A에서 이동한다
    let j = 0; // B에서 이동한다
    while(i < A.length){
            if(A[i] < B[j]) { // B가 더 컸던 위치이다. 이 경우 i와 j를 동시에 이동시킨다.
                i++;
                j++;
                answer++;
            }
            else { // A가 더 컸던 경우이다. 현재 B는 가장 큰값이므로, A에서 더 작은 값으로 이동할때까지 A의 포인터를 이동시킨다.
                i++;
            }
        
    }
    
    return answer;
}
post-custom-banner

0개의 댓글