본문 바로가기
Computer Science

올해의 조련사

by OKOK 2019. 2. 10.

1. 올해의 조련사

2. 오케이

3. 경우의 수를 만들어서 풀이

4. 이런 저런 케이스 조절

5. 대소 비교 진행함 

6. 최소 3개의 경우의 수 그리고 딸려오는 경우의 수 3개 존재

7. 왼쪽, 오른쪽, 양쪽, 홀수, 짝수


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
84
85
86
87
88
89
90
91
#include <stdio.h>
 
char arr[10];
 
int main(void)
{
    freopen("input.txt""r", stdin);
    int t = 0;
    int tc = 0;
    int n = 0;
 
    scanf("%d\n"&t);
    while (tc++ < t)
    {
        scanf("%d\n"&n);
        for (int i = 0; i < n; i++)
        {
            scanf("%c\n", arr + i);
        }
        printf("#%d ", tc);
        for (int f = 0, b = n - 1, nf, nb, k, j, dec; f <= b;) // front, back, new front, new back,
        {
            if (arr[f] < arr[b])
            {
                printf("%c", arr[f++]);
            }
            else if (arr[f] > arr[b])
            {
                printf("%c", arr[b--]);
            }
            else if (f == b)
            {
                printf("%c", arr[f]);
                break;
            }
            else // 같은 글자 일 때,
            {
/*
                dec = 0;
                for (k = 1; arr[f + k] == arr[b - k] && arr[f + k - 1] >= arr[f + k] && f + k <= b; k++)
                {
                    if (arr[f + k - 1] > arr[f + k])
                    {
                        dec = 1;
                    }
                }*/
                nf = f + k;
                nb = b - k;
 
                if (nf <= nb)
                {
                    if (arr[nf] > arr[f] && arr[nb] > arr[b]) //  이전것과 비교해서, 뒤에가 크다면, 먼저 작은 것부터 출력하고,
                    {
                        for (j = f; j < nf; j++printf("%c", arr[j]);
                        for (j = b; j > nb; j--printf("%c", arr[j]);
                        f = nf;
                        b = nb;
                    }
                    else if (arr[nf] > arr[nb]) // 일반 사례 한쪽 출력
                    {
                        for (j = b; j > nb; j--)
                        {
                            printf("%c", arr[j]);
                        }
                        b = nb;
                    }
                    else // 반대의 경우 양쪽 출력
                    {
                        for (j = f; j < nf; j++)
                        {
                            printf("%c", arr[j]);
                        }
                        f = nf;
                    }
                }
                else if (nf == nb && arr[f] < arr[nf]) // 가운데 하나 남았을 때,
                {
                    for (j = f; j < nf; j++printf("%c", arr[j]);
                    for (j = b; j > nb; j--printf("%c", arr[j]);
                    printf("%c", arr[nf]);
                }
                else // 반대 일 때,
                {
                    for (j - f; j <= b; j++printf("%c", arr[j]);
                    break;
                }
            }
        }
        puts("");
    }
}
cs

 


'Computer Science' 카테고리의 다른 글

키 순서  (0) 2019.02.10
지구 온난화  (0) 2019.02.10
Intersection  (0) 2019.02.10
팰린드롬  (0) 2019.02.10
이진 문자열 복원  (0) 2019.02.08

댓글