Problem Solving/백준

[백준-22351] 수학은 체육과목 입니다 3

문제

이환이는 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