본문 바로가기
Computer Science

A응실 K번재 문자열 / q_sort, 아이디어

by OKOK 2018. 12. 18.

1. K번째 문자열

2. q_sort

3. 부분 문자열에 대한 아이디어 체크

4. 전 문제와 코드는 동일

5. 부분 문자열에 대한 아이디어만 추가 


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
92
93
94
95
96
97
98
99
100
101
102
//#define MAX 1000
#define MAX 10
#include <stdio.h>
int K;
char src[MAX];
int num[MAX];
 
int str_len(char * s)
{
    int n = 0;
    while (s[n]) n++;
    return n;
}
 
int str_cmp(char * a, char * b)
{
    while (*|| *b)
    {
        if (*!= *b) return *- *b;
        a++;
        b++;
    }
    return 0;
}
 
int str_cnt(char *a, char *b)
{
    int rtn = 0;
    while (*!= '$' && *!= '$')
    {
        if (*!= *b) break;
        rtn++;
        a++;
        b++;
    }
    return rtn;
}
 
void q_sort(int s, int e)
{
    int T, L, P = e, tmp;
 
    if (s >= e) return;
 
    for (L = s, T = s; L < e; L++)
    {
        if (str_cmp(&src[num[L]], &src[num[P]]) < 0)
        {
            if (L != T)
            {
                tmp = num[L];
                num[L] = num[T];
                num[T] = tmp;
            }
            T++;
        }
 
    }
 
    if (T != P)
    {
        tmp = num[T];
        num[T] = num[P];
        num[P] = tmp;
    }
 
    q_sort(s, T - 1);
    q_sort(T + 1, e);
}
 
int main(void)
{
    freopen("input.txt""r", stdin);
    int T;
    scanf("%d"&T);
    for (int t = 1; t <= T; t++)
    {
        int s;
        scanf("%d%s"&K, src);
        int l = str_len(src);
        for (int i = 0; i < l; i++) num[i] = i;
        q_sort(0, l - 1);
        for (int i = 0; i < l; i++)
        {
            int tmp;
            s = i;
            if (i == 0) tmp = l - num[i];
            else tmp = l - num[i] - str_cnt(src + num[i], src + num[i - 1]);
 
            if (K <= tmp) {
                src[l + K - tmp] = '\0';
                break;
            }
            K -= tmp;
        }
        printf("#%d ", t);
        if (s == l) printf("none\n");
        else printf("%s\n"&src[num[s]]);
    }
    return 0;
}
 
cs


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

A응실 금속막대 / 구현 아이디어  (0) 2018.12.19
행렬찾기 / 소트  (0) 2018.12.19
A응실 K번째 접미어 / strcmp, q_sort  (0) 2018.12.18
A응실 하나로 / 구현  (0) 2018.12.18
백준 1753 최단경로 / 다익스트라  (0) 2018.12.17

댓글