백준 알고리즘(C++)

백준 9966번 한국이 그리울 땐 서버에 접속하지(C++)

coding232624 2023. 12. 17. 20:43

문제

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

 

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

총 N개의 줄에 걸쳐서, 입력으로 주어진 i번째 파일 이름이 패턴과 일치하면 "DA", 일치하지 않으면 "NE"를 출력한다. 참고로, "DA"는 크로아티어어로 "YES"를, "NE"는 "NO"를 의미한다.

www.acmicpc.net

 

해설

문자열의 길이를 리턴하는 .size()

특정 문자열의 위치를 리턴하는 .find()

문자열에서 원하는만큼 자르는(슬라이싱) .substr()

을 적절히 사용하여 푸는문제

파일명의 길이로 발생하는 예외를 적절히 처리해주는것이 주된 문제였음

 

코드

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
#include<bits/stdc++.h>
using namespace std;
 
// 정수 N, 문자열 1 / 정수개수만큼의 문자열 배열 생성
int N;
int checkpoint;
int Alen;
int exlen;
string A;
string check;
string front,back;
 
 
int main(){
    //N,A 입력받기
    cin >> N;
    cin >> A;
    Alen = A.size();    
 
    //A 별 위치 찾기 
    checkpoint = A.find("*");
    front = A.substr(0,checkpoint);
    back = A.substr(checkpoint+1 ,Alen);
    
    
    //N수만큼 입력받기 앞뒤 비교하기
    for (int i = 0; i < N ;i++){
        cin >> check;
        exlen = check.size();
    //변수 제거하기
        if (exlen < Alen -1cout << "NE" <<endl
        else{
            if ((front == check.substr(0,checkpoint)) && back == (check.substr(exlen-back.size()))) cout << "DA" <<endl;
            else cout << "NE" << endl;
        }
    }
    return 0
}
cs