본문 바로가기
Develop/백준 (Cpp)

[백준] 6137번 : 문자열 생성 (C++)

by Tarra 2023. 11. 27.

6137번 : 문자열 생성


문제)

N개의 문자로 이루어진 문자열 S가 입력된다.

이 문자열의 각 문자들로 새로운 문자열 T를 만들려고한다.

문자열 S로 문자열 T를 만드는 규칙은 다음과 같다.

  • 문자열 S의 가장 앞의 문자 하나를 문자열 T의 마지막에 추가한다.
  • 문자열 S의 가장 뒤의 문자 하나를 문자열 T의 마지막에 추가한다.

위 규칙으로 만들어진 문자열 T들 중 사전순으로 가장 빠른 문자열을 출력하는 프로그램을 작성하시오.

 

 

입력 :

첫 번째 줄에 문자열 S의 길이 N이 주어진다. (N <= 2,000)

이후 N개의 줄에 S를 이루는 문자들이 주어진다.

 

 

 

출력 :

만들어진 사전순으로 가장 빠른 문자열을 출력한다. 80글자마다 새줄 문자를 출력해야 한다.

 

 

 

 

 

풀이)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// 6137.문자열 생성
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int n;
char temp;
vector<char> alpha;
vector<string> ans;
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
 
    cin >> n;
 
    for (int i = 0; i < n; i++)
    {
        cin >> temp;
        alpha.push_back(temp);
    }
 
    int s = 0;
    int e = n - 1;
 
    string t = "";
    while (s <= e)
    {
        if (alpha[s] < alpha[e])
        {
            t += alpha[s++];
        }
        else if (alpha[s] > alpha[e])
        {
            t += alpha[e--];
        }
        else if (alpha[s] == alpha[e])
        {
            int ss = s + 1;
            int ee = e - 1;
 
            bool flag = false;
            while (ss <= ee)
            {
                if (alpha[ss] < alpha[ee])
                {
                    t += alpha[s++];
                    flag = true;
                    break;
                }
                else if (alpha[ss] > alpha[ee])
                {
                    t += alpha[e--];
                    flag = true;
                    break;
                }
                else
                {
                    ss++;
                    ee--;
                }
            }
 
            if (!flag)
            {
                t += alpha[s++];
            }
        }
    }
 
    for (int i = 0; i < n; i++)
    {
        if (i % 80 == 0 && i != 0cout << '\n';
        cout << t[i];
    }
 
    return 0;
}
 
cs

출처 : https://www.acmicpc.net/problem/6137 

 

6137번: 문자열 생성

첫 번째 줄에 문자열 S의 길이 N이 주어진다. (N <= 2,000) 이후 N개의 줄에 S를 이루는 문자들이 주어진다.

www.acmicpc.net