컴굥일지

[BOJ/백준 2993][C++] 세 부분 본문

알고리즘/코테 문제

[BOJ/백준 2993][C++] 세 부분

gyong 2021. 7. 11. 22:23
반응형

백준 2993 세부분

 

문제 링크

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

 

2993번: 세 부분

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

www.acmicpc.net

 

문제 내용

입력받은 문자열을 세 부분으로 나누어 뒤집고, 나누기 전과 같은 순서로 합친다. 이때 사전 순으로 가장 앞서는 단어를 출력한다.

 

문제 풀이

for문을 2번 돌려서 문자열을 3개의 토막으로 나눈다. 그리고 각각을 뒤집고, 이전과 비교하여 더 앞서는 단어를 ans에 저장한다.

 

코드

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

int main() {
	ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

	string str; cin >> str; //입력에는 공백 없이 한 줄만 주어짐
	int len = str.size();

	string ans = str;

	for (int i = 0; i < len - 2; i++) {
		for (int j = i+1; j < len - 1; j++) {
			string tmp = str;

			reverse(tmp.begin(), tmp.begin() + i + 1); //토막1
			reverse(tmp.begin() + i + 1, tmp.begin() + j + 1); //토막2
			reverse(tmp.begin() + j + 1, tmp.end()); //토막3

			ans = min(tmp, ans); //최솟값 갱신
		}
	}

	cout << ans << '\n';
	return 0;
}
반응형
Comments