문제 설명
연속된 숫자의 문자열과 숫자 Y가 주어지면 모든 집합이 아래 규칙을 따르도록 최소 집합의 수를 찾는 것입니다. -
- 세트에는 연속된 숫자가 포함되어야 합니다.
- 숫자는 두 번 이상 사용할 수 없습니다.
- 집합의 숫자는 Y보다 커서는 안 됩니다.
예
str ="1234"이고 Y =20이면 아래 집합이 생성되므로 답은 3입니다. -
{12} {3} 및 {4}
알고리즘
- 문자열을 숫자로 변환
- 숫자가 Y보다 크지 않으면 f =1로 표시
- 숫자가 Y를 초과하면 f =1이면 count를 늘리고 f를 0으로 다시 초기화하고 num을 s[i]-'0'으로 초기화하거나 num을 0으로 초기화합니다.
- 문자열을 완전히 반복한 후 f가 1이면 개수를 늘립니다.
예
#include <iostream>
#include <string>
using namespace std;
int getMinSets(string str, int y) {
int cnt = 0;
int num = 0;
int l = str.length();
int f = 0;
for (int i = 0; i < l; ++i) {
num = num * 10 + str[i] - 48;
if (num <= y) {
f = 1;
continue;
}
if (f) {
++cnt;
}
num = str[i] - '0';
f = 0;
if (num <= y) {
f = 1;
} else {
num = 0;
}
}
if (f) {
++cnt;
}
return cnt;
}
int main() {
string str = "1234";
int y = 20;
cout << "Minimum sets = " << getMinSets(str, y) << endl;
return 0;
} 출력
위의 프로그램을 컴파일하고 실행할 때. 다음 출력을 생성합니다 -
Minimum sets = 3