본문 바로가기

백준

1251 단어 나누기 [미완]

- 세 부분으로 나눠야 한다

- 부분의 길이는 최소 1이어야 한다

- 부분을 뒤집어서 합친 글자가 사전순으로 앞에 와야 한다

 

가장 먼저 든 생각은 가장 작은 알파벳과 그 다음으로 작은 알파벳을 찾은 다음 그 둘을 기준으로 나누면 가장 작은 문자열이 되겠다 싶었다.

 

그런데 무조건 부분의 길이가 1이상이어야 하므로 가장 작은 알파벳의 탐색 범위를 0 - size - 2로 잡고 그 다음을 idx2 - size - 1로 구하려 했는데.. 틀렸네.. 조금 더 고민해봐야겠다

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;

int     main()
{
	string s;
	cin >> s;

	int idx1 = 0;
	for (int i = 0; i < s.size() - 2; i++)
	{
		if (s[i] < s[idx1])
			idx1 = i;
	}

	int idx2 = idx1 + 1;
	for (int i = idx1 + 1; i < s.size() - 1; i++)
	{
		if (s[i] < s[idx2])
			idx2 = i;
	}


	for (int i = idx1; i >= 0; i--)
		printf("%c", s[i]);
	for (int i = idx2; i > idx1; i--)
		printf("%c", s[i]);
	for (int i = s.size() - 1; i > idx2; i--)
		printf("%c", s[i]);


	return 0;
}

'백준' 카테고리의 다른 글

12026 BOJ 거리  (0) 2020.12.28
[10774] 저지  (0) 2020.12.23
14426 접두사 찾기 [미완]  (0) 2020.12.12
1758 알바생 강호  (0) 2020.12.11
20125 쿠키의 신체 측정  (0) 2020.12.11