JavaScript의 Match 솔루션별 판매

2040 단어

문제:




색깔별로 짝을 지어야 하는 큰 양말 더미가 있습니다. 각 양말의 색상을 나타내는 정수 배열이 주어지면 색상이 일치하는 양말이 몇 켤레가 있는지 확인하십시오.
예시
n = 7,
ar = [1,2,1,2,1,3,2]

색상 1과 색상 2가 각각 한 켤레 있습니다. 각 색상에 하나씩 3개의 이상한 양말이 남아 있습니다. 쌍의 수는 2입니다.

기능 설명

아래 편집기에서 sockMerchant 기능을 완료하십시오.

sockMerchant에는 다음 매개변수가 있습니다.

int n: 더미에 있는 양말의 수
int ar[n]: 각 양말의 색상

보고

int: 쌍의 수

해결책:



이 문제를 해결하는 가장 간단한 방법은 다음과 같이 간단한 단계로 나누는 것입니다.
  • 항목 목록을 살펴보고 색상별로 정렬합니다.
  • 동일한 색상의 항목 컬렉션이 있으면 컬렉션에서 몇 개가 쌍을 구성하는지 결정할 수 있습니다.

  • Javascript에서는 다음과 같이 해결합니다.
  • 배열을 반복하고 맵에 고유한 값을 할당합니다. 값이 이미 맵에 있는 경우 값을 증가시킵니다. 아이디어는 항목과 항목이 나타나는 횟수를 보여주는 지도를 만드는 것입니다.
  • Map(4) { 10 => 4, 20 => 3, 30 => 1, 50 => 1 }
  • 이제 지도에서 쌍을 형성하는 것을 결정할 수 있습니다.

  • function sockMerchant(n, ar) {   
    
        //1. Loop through array items and arrange items in a map by unique color
    
        let mapOfColors = new Map();
    
        for(let i = 0; i< n ; i++ ){
            // If found, increment the map value
            if(mapOfColors.has(ar[i])){
                let currentVal = mapOfColors.get(ar[i]);
                mapOfColors.set(ar[i], currentVal+1);
            }        
            // If item is not found, add it to map
            else{
                mapOfColors.set(ar[i], 1)
            }        
        }
    
        //2. From the map, we can now detemine which form a pair
    
        let pairs = 0; 
    
        for(let countOfColor of mapOfColors.values() ){
            // Check if it can create complete pairs
            if(countOfColor % 2 === 0){
                pairs += countOfColor/2;
            }else{
                pairs += (countOfColor-1)/2;
            }
        }
    
        return pairs;
    }
    
    const pairs = sockMerchant(9, [10, 20, 20, 10, 10, 30, 50, 10, 20]);
    console.log ( pairs);
    

    좋은 웹페이지 즐겨찾기