본문 바로가기

투 포인터

K번째 문자열

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18KWf6ItECFAZN&categoryId=AV18KWf6ItECFAZN&categoryType=CODE&problemTitle=K%EB%B2%88%EC%A7%B8&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

부분 문자열을 구하는 것은

투 포인터로 하고,

중복과 정렬은 set로 구현.

 

set는 index로 접근을 할 수 없다.

iterator를 사용하자.

 

<소스 코드>

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
#include <iostream>
#include <string>
#include <set>
 
using namespace std;
 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    int test;
    cin >> test;
 
    for (int t = 1; t <= test; t++)
    {
        int k;
        string s;
        cin >> k >> s;
 
        // 중복 제거, 정렬
        set<string> ans;
 
        // 투 포인터
        for (int i = 0; i < s.length(); i++)
        {
            for (int j = 0; j < s.length(); j++)
                ans.insert(s.substr(i, j + 1));
        }
 
        cout << '#' << t << ' ';
 
        if (ans.size() < k)
            cout << "none" << '\n';
        else
        {
            int cnt = 0;
            set<string>::iterator iter = ans.begin();
            while (cnt != k - 1)
            {
                iter++;
                cnt++;
            }
            cout << *iter << '\n';
        }
    }
    return 0;
}
cs

'투 포인터' 카테고리의 다른 글

KMP 알고리즘  (1) 2024.01.31
最長の階段  (0) 2023.07.12
핵심! 최솟값 찾기 (슬라이딩 윈도우 + 덱)  (0) 2023.07.10
DNA 비밀번호  (0) 2023.07.10
용액  (0) 2023.07.08