※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 2993번 문제인 세 부분이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/2993 

 

2993번: 세 부분

첫째 줄에 원섭이가 고른 단어가 주어진다. 고른 단어는 알파벳 소문자로 이루어져 있고, 길이는 3보다 크거나 같고, 50보다 작거나 같다.

www.acmicpc.net

주어지는 문자열을 세 부분으로 나누는 경우의 수가 매우 적음을 관찰하자.

 

따라서 모든 가능한 방법으로 문자열을 나눠 각각을 뒤집고 합해본 다음 그중 가장 사전순으로 빠른 문자열을 출력해 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

string s; int slen;
string ans = "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> s;
	slen = s.length();
	for (int i = 1; i < slen; i++) {
		string s1 = s.substr(0, i);
		reverse(s1.begin(), s1.end());

		for (int j = i + 1; j < slen; j++) {
			string s2 = s.substr(i, j - i);
			string s3 = s.substr(j, slen - j);
			reverse(s2.begin(), s2.end());
			reverse(s3.begin(), s3.end());

			string tmp = s1 + s2 + s3;
			if (tmp < ans) ans = tmp;
		}
	}

	cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 2823 // C++] 유턴 싫어  (0) 2024.01.18
[BOJ 2994 // C++] 내한 공연  (0) 2024.01.17
[BOJ 2992 // C++] 크면서 작은 수  (1) 2024.01.15
[BOJ 2780 // C++] 비밀번호  (0) 2024.01.14
[BOJ 6193 // C++] Hungry Cows  (1) 2024.01.13

+ Recent posts