Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 포커 페어 카드 찾기 – 가장 높은 페어 반환하기

문제 개요

포커 플레이어가 무작위로 뽑은 5장의 카드를 나타내는 배열을 입력받는 함수를 작성해야 합니다. 이때 배열은 정확히 5개의 요소로 구성됩니다.

5장의 카드 중 최소 한 쌍의 페어가 존재한다면, 함수는 가장 높은 페어를 이루는 카드를 반환해야 합니다(페어가 하나뿐이라면 당연히 그 카드를 반환합니다). 반대로 페어가 전혀 없다면 false를 반환합니다.

예를 들어, 다음과 같은 배열이 주어졌다고 가정해 보겠습니다.

const arr = ['A', 'Q', '3', 'A', 'Q'];

이 경우 함수는 아래와 같은 값을 반환해야 합니다.

'A'  (카드 게임에서 'A' > 'Q'이므로)

구현 코드

다음은 위 문제를 해결하는 자바스크립트 코드입니다.

const arr = ['A', 'Q', '3', 'A', 'Q'];
const greatestPair = arr => {
    const legend = '23456789JQKA';
    const pairs = [];
    for(let i = 0; i < arr.length; i++){
        if(i !== arr.lastIndexOf(arr[i])){
            pairs.push(arr[i]);
        };
    };
    if(!pairs.length){
        return false;
    };
    pairs.sort((a, b) => legend.indexOf(b) - legend.indexOf(a));
    return pairs[0];
};
console.log(greatestPair(arr));

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

A

코드 동작 원리

이 코드가 어떻게 동작하는지 단계별로 살펴보겠습니다.

1. 페어 탐색: 각 카드에 대해 lastIndexOf() 메서드를 사용해 같은 카드가 배열 내 다른 위치에도 존재하는지 확인합니다. 현재 인덱스와 마지막 등장 인덱스가 다르다면 해당 카드는 페어를 이루고 있는 것이므로 pairs 배열에 추가합니다.

2. 페어가 없는 경우 처리: 탐색 결과 pairs 배열이 비어 있다면 페어가 존재하지 않는 것이므로 false를 즉시 반환합니다.

3. 내림차순 정렬: 카드의 강함 순서를 나타내는 기준 문자열 '23456789JQKA'를 활용해 페어들을 내림차순으로 정렬합니다. 이렇게 하면 가장 높은 페어가 항상 배열의 첫 번째 위치에 오게 됩니다.

4. 결과 반환: 정렬된 배열의 첫 번째 요소, 즉 가장 높은 페어의 카드를 반환합니다.

이처럼 lastIndexOf()sort()만으로도 복잡한 로직 없이 간결하게 포커 페어 판별 기능을 구현할 수 있습니다.