반응형

문제 출처 :


https://www.acmicpc.net/problem/9996



알고리즘 분석 :


문제 해결에 필요한 사항

1. String STL

2. 구현


이 문제를 생각해보자.


snldfkadf*asdnlkasd라는 방식으로 항상 *은 문자 사이에 오게 된다.


따라서 우리는 어떤 문자 T를 입력받고 위의 문자와 비교하기 위해


T의 앞부분이 snldfkadf와 같은지 확인하고 T의 뒷부분이 asdnlkasd와 같은지만 확인하면 된다.


그렇게 된다면 나머지 중간의 값은 *이 해결해 줄 것이다.


따라서 앞 문자열은 substr을 통해 compare를 해주면 되고 뒷 문자열은 *다음문자부터 받아오는 하나의 substr을 reverse해주어

compare를 해주면 된다.


예를 들어 abc*dfc가 있고 abcqwnelkdfc가 있다면


*다음부터인 dfc를 뒤집으면 cfd가 되고 abcqwnelkdfc를 뒤집어주면 cfdkle...가 된다. 따라서 cfd와 cfd가 같은지만 비교해주면 된다.






소스 코드 : 


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
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
 
#define fastio() ios::sync_with_stdio(0),cin.tie(0);
 
using namespace std;
 
 
int main()
{
    fastio();
 
    int n;
    string str;
 
    cin >> n;
    cin >> str;
 
    string s = "", e = "";
    int len = str.size();
    int i = 0;
 
    for (i; str[i] != '*'; i++)
        s += str[i];
 
    i++;
 
    for (i; i < len; i++)
        e += str[i];
 
    reverse(e.begin(), e.end());
    while(n--)
    {
        string tmp;
        cin >> tmp;
 
        int sLen = s.size();
        int eLen = e.size();
        if (tmp.substr(0, sLen).compare(s) == 0)
        {
            tmp = tmp.substr(sLen, tmp.size());
            reverse(tmp.begin(), tmp.end());
 
            if (tmp.substr(0, eLen).compare(e) == 0)
            {
                cout << "DA" << endl;
                continue;
            }
        }
        cout << "NE" << endl;
    }
    return 0;
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


반응형

'Applied > 알고리즘 문제풀이' 카테고리의 다른 글

[1658번] 돼지 잡기  (2) 2017.11.14
[2866번] 문자열 잘라내기  (0) 2017.11.13
[3024번] 마라톤 틱택토  (0) 2017.11.12
[3023번] 마술사 이민혁  (0) 2017.11.11
[2367번] 파티  (0) 2017.11.10