문제 설명
연속된 숫자의 문자열과 숫자 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