[BOJ #22351] 수학은 체육과목 입니다 3

tolelom·2022년 6월 27일
0

백준

목록 보기
3/6

문제 설명

문제 링크
정수 AABB가 있다. (A<BA < B)
AA부터 BB까지 수를 띄워쓰기 없이 적은 문자열(SS)이 주어졌을 때 AABB를 구하여라 (1A,B9991 \leq A,B \leq 999)

예제

S = 121314
A=12A=12, B=14B=14

알고리즘

AABB가 최대 999이므로 AA는 한 자리, 두 자리, 세 자리 수 중 하나이다.
세 가지 경우를 모두 시도해보면 되는 문제(답이 아닌 경우는 없다.)

코드

#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;
    }
}
profile
이것 저것 작성하는 기술 블로그

0개의 댓글