문제 링크
정수 와 가 있다. ()
부터 까지 수를 띄워쓰기 없이 적은 문자열()이 주어졌을 때 와 를 구하여라 ()
S = 121314
,
와 가 최대 999이므로 는 한 자리, 두 자리, 세 자리 수 중 하나이다.
세 가지 경우를 모두 시도해보면 되는 문제(답이 아닌 경우는 없다.)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
string s;
int startNum, endNum;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
// init
cin >> s;
for (int i = 1; i <= 3; ++i) { // 첫 숫자가 i자리 수
int num = startNum = stoi(s.substr(0, i));
int pos = i;
int len = i; // length
bool flag = true;
while (pos < s.length()) {
if (num == 9 || num == 99) len++;
int nextNum = endNum = stoi(s.substr(pos, len));
if (num + 1 != nextNum) {
flag = false;
break;
}
num = nextNum;
pos += len;
}
if (!flag) continue;
// 주어진 S 자체가 하나의 수인 경우 예외 처리
if (s.length() <= 3 && startNum == stoi(s)) endNum = startNum;
cout << startNum << ' ' << endNum << '\n';
break;
}
}