Codeforces Round #751 (Div. 2)-A. Two Subsequences
falconlee236
·2021. 11. 20. 14:51
문제 설명
승현이에게 문자열 $s$가 주어진다. 우리는 다음 조건을 만족하는 비어있지 않은 두 문자열 $a$, $b$를 찾아야한다.
- 문자열 $a$와 $b$는 모두 $s$의 부분 문자열이다.
- 각 인덱스 $i$에 대해서 문자열 $s$의 문자 $s_i$는 반드시 문자열 $a$와 $b$ 둘중 하나에만 포함되어야 한다.
- 문자열 $a$는 가능한 사전적으로 작은 문자열이어야 한다. 그리고 $b$는 가능한 아무 문자열이라도 상관없다.
문자열 $s$가 주어졌을 때, 가능한 $a$와 $b$를 출력한다.
Input
첫번째 줄에는 테스트 케이스의 개수를 나타내는 정수 $t (1 \le t \le 1000)$ 이 주어진다.
각 테스트케이스의 첫번째 줄에는 문자열 $s (2 \le |s| \le 100)$가 주어진다. 문자열 $s$는 알파벳 소문자로만 이루어져 있다.
Output
각 테스트케이스마다 주어진 조건을 만족하는 문자열 $a$와 $b$를 출력한다. 만약 답이 여러개 있으면 아무거나 출력한다.
Example
input
3
fc
aaaa
thebrightboiler
output
c f
a aaa
b therightboiler
문제 접근
사용한 알고리즘: 구현
걸린 시간 : 00:01
문자열 $a$는 가장 작은 길이를 가지고, 사전순으로 가장 작은 문자열이어야 한다. 그러면 $a$는 길이가 1이고, 문자열중에서 가장 작은 값(std::min_element())을 가지면 되는거 아닐까?
그리고 $b$는 $s$에서 $a$를 뺀 값 (std::erase())을 그대로 출력하면 된다.
c++ STL에 있는 여러 함수를 적절히 사용하면 쉽게 풀 수 있는 문제.
정답 코드
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int t; cin >> t;
while(t--){
string s; cin >> s;
auto mn = min_element(s.begin(), s.end());
cout << *mn << " ";
s.erase(mn);
cout << s << "\n";
}
return 0;
}
'알고리즘 > codeforces' 카테고리의 다른 글
Codeforces Round #748 (Div. 3)-A. Elections (0) | 2021.11.24 |
---|---|
Codeforces Round #751 (Div. 2)-C. Array Elimination (0) | 2021.11.20 |
Codeforces Round #745 (Div. 2)-C. Portal (0) | 2021.11.16 |
Codeforces Round #745 (Div. 2)-B. Diameter of Graph (0) | 2021.11.16 |
Codeforces Round #745 (Div. 2)-A. CQXYM Count Permutations (0) | 2021.11.16 |