문제 링크: https://www.acmicpc.net/problem/2993
문자열을 적당히 세조각으로 나눠 각 세조각을 reverse를 해주고 다시 붙이면 됩니다.
for문 2개만 있으면 됩니다.
위 그림처럼 적당히 i, j를 고르면 3조각을 나눌 수 있습니다. 이때 i, j의 조건을 잘 설정해줘야겠죠
i의 범위는 [0, sz-3], j의 범위는 [i+1, sz-2]으로 하면 되겠습니다
#pragma GCC optimize ("Ofast")
#define _CRT_SECURE_NO_WARNINGS
#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING
#include <bits/stdc++.h>
using namespace std;
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
string s;
cin >> s;
auto sz = s.size();
string ans(sz, 'z');
for (int i = 0; i < sz-2; ++i) {
for (int j = i + 1; j < sz-1; ++j) {
string tmp = s;
reverse(tmp.begin(), tmp.begin() + i+1);
reverse(tmp.begin()+i+1, tmp.begin() + j+1);
reverse(tmp.begin()+j+1, tmp.end());
ans = min(ans, tmp);
}
}
cout << ans << '\n';
return 0;
}
std::reverse를 사용했습니다.
반응형
'Online Judge > 백준' 카테고리의 다른 글
[백준][C++] 1780: 종이의 개수 (0) | 2020.07.11 |
---|---|
[백준][C++] 1764: 듣보잡 (0) | 2020.07.10 |
[백준][C++] 1806: 부분합 (0) | 2020.07.08 |
[백준][C++] 2473: 세 용액 (0) | 2020.07.08 |
[백준][C++] 2470: 두 용액 (0) | 2020.07.08 |