Codeforces Round #751 (Div. 2)-A. Two Subsequences

falconlee236

·

2021. 11. 20. 14:51

반응형

문제 설명

승현이에게 문자열 $s$가 주어진다. 우리는 다음 조건을 만족하는 비어있지 않은 두 문자열 $a$, $b$를 찾아야한다.

  1. 문자열 $a$와 $b$는 모두 $s$의 부분 문자열이다.
  2. 각 인덱스 $i$에 대해서 문자열 $s$의 문자 $s_i$는 반드시 문자열 $a$와 $b$ 둘중 하나에만 포함되어야 한다.
  3. 문자열 $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;
}
반응형