이 튜토리얼에서는 누구에게도 피해를 주지 않고 k 학생에게 n개의 공을 분배하는 방법을 배울 것입니다.
아이디어는 간단합니다. 학생들에게 배포해야 하는 다양한 색상의 n개의 공이 있습니다. 한 학생에게 같은 색의 공을 두 개 이상 줄 필요는 없습니다. 한 학생이 같은 색의 공을 두 개 이상 얻을 수 있는 경우 배포가 발생하지 않아야 합니다.
예를 들어 보겠습니다.
입력
n = 10 k = 5 ballsColors = "rrrgbrbgbr"
출력
Yes
색상은 학생 수(k)보다 많지 않습니다. 따라서 어떤 학생도 같은 색의 공을 두 개 이상 얻지 못합니다.
문제를 해결하는 단계를 살펴보겠습니다.
-
n, k 및 공 색상을 초기화합니다.
-
지도를 초기화하여 공 색상 수를 저장합니다.
-
공의 색상을 반복하고 각 공 색상의 개수를 찾습니다.
-
이제 각 공의 개수를 반복합니다.
-
공의 색이 학생 수보다 크면 배포할 수 없습니다.
-
그렇지 않으면 공을 배포할 수 있습니다.
-
-
결과를 인쇄하십시오.
예시
코드를 봅시다.
#include <bits/stdc++.h> using namespace std; bool canDistributeBalls(string ballsColors, int n, int k) { map<char, int> charCount; for (int i = 0; i < n; i++) { charCount[ballsColors[i]]++; } map<char , int >::iterator itr; for(itr = charCount.begin(); itr != charCount.end(); itr++) { if (itr->second > k) { return false; } } return true; } int main() { int n = 10, k = 5; string ballsColors = "rrrgbrbgbr"; if (canDistributeBalls(ballsColors, n, k)) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; }
출력
위의 프로그램을 실행하기 위해 실행하면 다음과 같은 결과를 얻을 수 있습니다.
Yes
결론
튜토리얼에서 질문이 있는 경우 댓글 섹션에 언급하세요.