🔗 문제 링크
https://www.hackerrank.com/challenges/beautiful-pairs/problem?isFullScreen=true
✏️ 풀이
function beautifulPairs(A, B) {
const getIntegers = (arr) => arr.reduce((acc, v) => {
if (acc[v]) {
acc[v]++;
} else {
acc[v] = 1;
}
return acc;
}, {});
const intA = getIntegers(A);
const intB = getIntegers(B);
const matchCount = Object.keys(intA).reduce((acc, int) => {
if (intB[int]) {
acc += Math.min(intA[int], intB[int]);
}
return acc;
}, 0);
return matchCount === A.length ? matchCount - 1 : matchCount + 1;
}
A, B 모두 각 정수가 몇 개씩 있는지를 객체로 만든다. 그 다음 intA의 keys, 즉 A에만 있는 정수 목록을 순회하면서 동일한 정수가 B에도 있다면 A와 B에 포함된 해당 정수의 개수 중 더 적은 쪽을 택하여 누적한다. 이렇게 하면 B의 요소 1개를 바꾸기 전의 pairwise disjoint beautiful pairs 개수를 구할 수 있다.
만약 이 pairs의 개수가 A, B의 길이와 같다면 B의 요소 1개를 바꿔서 pairs의 개수가 하나 줄어들게 되고, pairs의 개수가 A, B의 길이보다 적다면 B의 요소 1개를 바꿔서 하나의 pair를 더 만들 수 있게 되어 개수가 하나 늘어난다.
'연습장 > HackerRank 문제풀이' 카테고리의 다른 글
[HackerRank - Easy] Ice Cream Parlor - JavaScript (0) | 2023.01.05 |
---|---|
[HackerRank - Easy] Weighted Uniform Strings - JavaScript (0) | 2023.01.03 |
[HackerRank - Easy] Two Characters - JavaScript (0) | 2023.01.03 |
[HackerRank - Easy] Super Reduced String - JavaScript (0) | 2023.01.03 |
[HackerRank - Easy] Flatland Space Stations - JavaScript (0) | 2023.01.01 |