9996 - 한국이 그리울 땐 서버에 접속하지

재찬·2023년 1월 4일
0

Algorithm

목록 보기
9/64

문제

코드

#include <bits/stdc++.h>
using namespace std;

int n;
string pre, suf, s, str;

int main(){
	cin >> n;
	cin >> str;
	
	int pos = str.find('*');
	
	pre = str.substr(0, pos);
	suf = str.substr(pos + 1);
	
	for(int i = 0; i < n; i++){
		cin >> s;
		
		if(s.size() < pre.size() + suf.size()){
			cout << "NE" << '\n';
		}
		
		else{
			if(pre == s.substr(0, pre.size()) && suf == s.substr(s.size() - suf.size())){
				cout << "DA" << '\n';
			}
			else {
				cout << "NE" << '\n';
			}
		}
	}
	return 0; 
}

풀이

'별'을 기준으로 앞 뒤 문장을 나눠야겠다고 생각했다.
처음에 접근할 때는 '별' 앞의 한 글자와 뒤의 한 글자를 가져온다고 생각했는데
'별' 앞이나 뒤가 여러 글자일수도 있겠다라는 생각이 들어 기준을 '별'로 잡았다.
'별'을 기준으로 앞쪽에 있는 문장과 뒤 쪽에 있는 문장을 나눠 저장시킨다.
그 후 입력 받은 문장과 비교한다.
여러 경우의 수가 있겠지만 size를 기준으로 나누는 것이 가장 깔끔하게 나누어 떨어져 size를 기준으로 선정했다.
입력 받은 문자열의 size가 pre, suf의 합보다 작으면 기준을 비교할 필요도 없으니 NE 출력.
pre와 입력받은 문자열의 시작이 pre와 같고, 뒷 부분이 suf와 같다면 DA 출력.
둘 중에 하나만 만족 하거나 하나도 만족 못할시 NE 출력하도록 설계했다.

결과

후기

체감상 조금 어려운 문제였다. 기준 문자열에서 앞 뒤를 나누는 것까지는 풀었는데 그 후에 입력 받은 문자열과 이 분리해둔 문자열을 어떻게 비교해서 원하는 조건을 출력하는지에 대한 생각이 쉽게 떠오르지 않았던 것 같다.

0개의 댓글