문제 링크입니다: 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 |