문제링크 : https://www.acmicpc.net/problem/22351
22351번: 수학은 체육과목 입니다 3
이환이의 선생님이 부른 두 정수 $A$와 $B$를 공백으로 구분하여 출력하라. 만약 가능한 답이 두 가지 이상이라면, 그중 $A$가 가장 작은 것을 출력하라. 이환이는 항상 정확한 답을 쓰기 때문에,
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAX 987654321
#define pii pair <int, int>
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(0);
string S;
cin >> S;
bool check = 1;
for(int A=1; A<=999 && check==1; A++) //A부터 ~
{
string new_S="";
for(int B=A; B<=999; B++) // ~999까지
{
new_S += to_string(B); //순서대로 더해줌
if(new_S == S)
{
cout << A << " " << B;
check=0; //이후 출력 방지
}
}
}
return 0;
}
문자열이 순차적인 수로 이루어져 있으므로 반복문을 통해서 완전 탐색을 했다.
수의 범위가 1 ~ 999까지 이기에 999까지 탐색을 한다.
A부터 999까지 순차적으로 문자열로 바꿔서 더해주고 이게 처음 입력받은 문자열과 같다면 맨 앞과 맨 뒤에 해당하는 A, B를 출력해준다.
반복문에서 check의 역할은 출력은 가장 작은 케이스인 첫 출력만 필요하기에 이후 출력은 안하기 위함이다.
예를 들어서 S가 12라고 가정하자.
1과 2가 들어가서 12이거나,
12가 들어가서 12일 수가 있다.
문제에서 조건으로 A가 가장작아야 하므로 12, 12가아닌 1, 2가 출력되어야 한다.
따라서 가장 작은 값은 맨 처음에 출력되는 값이므로 맨 첫 값만 출력하면 이후 값은 검토할 필요도 없다.
굳이 이렇게 안하고 걍 return 0;을 써도 되는데 저 방법이 기억난 김에 사용해봤다.
'백준 > 실버' 카테고리의 다른 글
[백준 21736번] 헌내기는 친구가 필요해 (C++) (0) | 2023.04.07 |
---|---|
[백준 2512번] 예산 (C++) (0) | 2023.04.06 |
[백준 17419번] 비트가 넘쳐흘러 (C++) (0) | 2023.04.04 |
[백준 2910번] 빈도 정렬 (C++) (0) | 2023.04.02 |
[백준 14594번] 동방 프로젝트 (Small) (C++) (0) | 2023.04.01 |