알고리즘/BOJ

백준 9996번 한국이 그리울 땐 서버에 접속하지

꾸준함. 2018. 10. 27. 17:03

문제 링크입니다: https://www.acmicpc.net/problem/9996


알고리즘은 아래와 같습니다.

1. *를 기준으로 앞 뒤를 각각 a와 b 문자열에 저장합니다.

2. 주어진 문자열과 a를 비교해서 같은지를 판단합니다. 이후에 b와 비교를 할 때 인덱스가 중복방문되면 안되기 때문에 visited 배열을 통해 표시해줍니다.

3. 주어진 문자열과 b를 비교하는데 조건이 성립되도 중복방문되면 성립하지 않는 것입니다.

4. 2와 3 모두 통과하면 DA 둘 중 하나라도 통과 못하면 NE를 출력합니다.


#include <iostream>

#include <string>

#include <cstring>

using namespace std;

 

bool visited[100];

 

int main(void)

{

        ios_base::sync_with_stdio(0);

        cin.tie(0);

        int N;

        cin >> N;

 

        string pattern;

        cin >> pattern;

 

        string a, b;

        bool star = false;

        for (int i = 0; i < pattern.size(); i++)

                 if (pattern[i] == '*')

                 {

                         star = true;

                         continue;

                 }

                 else if (!star)

                         a += pattern[i];

                 else

                         b += pattern[i];

 

        for (int i = 0; i < N; i++)

        {

                 string s;

                 cin >> s;

 

                 bool answer = true;

                 for (int j = 0; j < a.size(); j++)

                 {

                         //조건 성립 X

                         if (s[j] != a[j])

                         {

                                 answer = false;

                                 break;

                         }

                         //주어진 파일 인덱스를 중복방문하면 안되기 때문에 표시

                         visited[j] = true;

                 }

 

                 if (!answer)

                 {

                         cout << "NE\n";

                         continue;

                 }

 

                 int idx = s.length() - 1;

                 for (int j = b.size() - 1; j >= 0; j--)

                 {

                         //조건이 성립하지 않고 파일 인덱스 중복방문 시

                         if (visited[idx] || s[idx] != b[j])

                         {

                                 answer = false;

                                 break;

                         }

                         idx--;

                 }

                

                 if (answer)

                         cout << "DA\n";

                 else

                         cout << "NE\n";

        }

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 2804번 크로스워드 만들기  (0) 2018.10.27
백준 10769번 행복한지 슬픈지  (0) 2018.10.27
백준 1718번 암호  (0) 2018.10.27
백준 2998번 8진수  (0) 2018.10.27
백준 1371번 가장 많은 글자  (0) 2018.10.27