문제
이환이는 4차 산업혁명 시대에 살고 있는 천재 5살 아기이다. 어느 날, 유치원 선생님은 이환이의 천재성을 알아본 후 다음과 같은 문제를 내줬다.
A 이상 B 이하의 정수를 모두 더한 값은 얼마일까?
이환이는 천재성은 있지만 아직 아기라서 덧셈이 무엇인지는 잘 모른다. 다음 날, 이환이는 공책에 A 이상 B 이하의 모든 정수를 크기 순서대로 띄어쓰기 없이 적어 왔다. 예를 들어 A=4,B=21 일 경우, 이환이가 적어 온 답은 456789101112131415161718192021과 같다.
이환이는 특출난 과제 집착력을 가진 천재지만, 이환이의 선생님은 그렇지 않다. 사실, 이환이의 선생님은 어제 본인이 부른 두 개의 수가 무엇이었는지도 잊어버렸다. 선생님이 기억하는 정보는 A와 B 모두 1 이상 999 이하의 정수였고, 당연히 A는 B보다 작거나 같았다는 것뿐이다.
이환이가 적어 온 숫자들의 나열이 주어지면, 선생님이 부른 두 수를 찾을 수 있을까?
입력
첫 번째 줄에 이환이가 적어 온 답을 나타내는 문자열 S가 주어진다. S는 숫자(0123456789)로만 이루어져 있으며, 길이는 1 이상 2 889 이하이다.
출력
이환이의 선생님이 부른 두 정수 A와 B를 공백으로 구분하여 출력하라. 만약 가능한 답이 두 가지 이상이라면, 그중 A가 가장 작은 것을 출력하라.
이환이는 항상 정확한 답을 쓰기 때문에, 문제의 조건을 만족하는 답이 존재하는 입력만이 주어진다.
예제 입력 1
9101112
예제 출력 1
9 12
예제 입력 2
12
예제 출력 2
1 2
예제 입력 3
999
예제 출력 3
999 999
예제 입력 4
456789101112131415161718192021
예제 출력 4
4 21
<Code>
//22351] 수학은 체육과목 입니다 3
//1자리, 2자리, 3자리수로 구분해서 연산
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main() {
cin.tie(NULL); cout.tie(NULL);
ios_base::sync_with_stdio(false);
freopen("input.txt","rt", stdin);
string s;
string tmp1, tmp2;
int start, end, find;
cin>>s;
for(int i=1; i<=3; i++){
tmp1=s.substr(0, i); //자릿수별로 자름
start=stoi(tmp1);
find=start;
end=start;
string compStr=""; //string을 누적해나갈 빈 문자열 선언 (위치주의: for문 밖에서 하면 안됨)
for(int j=0; j<s.size(); j+=to_string(find).size(),find++){
tmp2=s.substr(j, to_string(find).size()); //찾으려는 수의 size만큼 잘라서 tmp2에 저장
if(find!=stoi(tmp2)) break;
compStr+=tmp2; //find와 같다면 찾은 tmp2를 compStr에 누적
end=find;
}
if(compStr==s){ //반복문 끝까지 돌고 처음 입력받은 s와 비교해서 똑같다면 답 출력
cout<<start<<' '<<end<<endl;
return 0;
}
}
return 0;
}
<Comment>
- 1/2/3자릿수별로 구분해서 생각해야 한다는 것이 포인트
https://www.acmicpc.net/problem/22351
22351번: 수학은 체육과목 입니다 3
이환이의 선생님이 부른 두 정수 $A$와 $B$를 공백으로 구분하여 출력하라. 만약 가능한 답이 두 가지 이상이라면, 그중 $A$가 가장 작은 것을 출력하라. 이환이는 항상 정확한 답을 쓰기 때문에,
www.acmicpc.net
'Problem Solving > 백준' 카테고리의 다른 글
[백준-14501] 퇴사 (0) | 2021.08.14 |
---|---|
[백준-20413] MVP 다이아몬드 (Easy) (0) | 2021.08.14 |
[백준-20438] 출석체크 (0) | 2021.08.09 |
[백준-21737 SMUPC 계산기] (0) | 2021.08.06 |
[백준-20363] 당근 키우기 (0) | 2021.08.06 |