차시

23/07/04 1차시

23/07/05 2차시

 

필요 개념

문자열 라이브러리 : find, substr, reverse

 

해설 코드와 내 코드 비교

반례(패턴: ab*ab, 파일이름: ab)

=> 사이즈 체크 필요

=> 보통 반례 기준은 사이즈, 최대, 최소로 판단

문자열 라이브러리 사용 여부

 

해설 코드

#include<bits/stdc++.h> 
using namespace std;   
int n; 
string s, ori_s, pre, suf; 
int main(){
    cin >> n;
    cin >> ori_s;  
    int pos = ori_s.find('*');  
    pre = ori_s.substr(0, pos); 
    suf = ori_s.substr(pos + 1); 
    for(int i = 0; i < n; i++){
        cin >> s; 
        if(pre.size() + suf.size() > s.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;
}

 

내 코드 1차(성공)

#include <iostream>
using namespace std;
int main(){
    string s, s1, s2, temp;
    bool chk = false;
    bool skip = false;
    int n;
    cin >> n;
    cin >> s;
    // 패턴 쪼개기
    for(int i = 0; i < s.length(); i++){
        if(s[i] == '*'){
            chk = true;
            continue;
        }
        if(!chk)
            s1 += s[i];
        else
            s2 += s[i];

    }
    // prefix, suffix
    int s1len = s1.length();
    int s2len = s2.length();

    // 테스트 케이스
    for(int i = 0; i < n; i++){
        cin >> temp;
        int templen = temp.length();
        skip = false;
        if(s1len + s2len > templen){
            cout << "NE" << endl;
            continue;
        }

        // 앞 패턴 비교
        if(s1len > 0){
            for(int j = 0; j < s1len; j++){
                if(s1[j] != temp[j]){
                    cout << "NE" << endl;
                    skip = true;
                    break;
                }
                    
            }
        }
        if(skip)
            continue;
        // 뒤 패턴 비교
        if(s2len > 0){
            for(int j = 0; j < s2len; j++){
                if(s2[s2len-j-1] != temp[templen-j-1]){
                    cout << "NE" << endl;
                    skip = true;
                    break;
                }
            }
        }
        if(skip)
            continue;        
        cout << "DA" << endl;
    }
}

내 코드 2차(실패)

#include <iostream>
using namespace std;
int main(){
    int n;
    string s, temp, prefix, suffix;

    cin >> n;
    cin >> s;
    int pos = s.find('*');
    prefix = s.substr(0, pos);
    suffix = s.substr(pos+1);
    for(int i = 0; i < n; i++){
        cin >> temp;
        if(prefix.size() + suffix.size() >= temp.size()){
            cout << "NE" << endl;
            continue;
        }
        if(prefix == temp.substr(0, prefix.size() && suffix == temp.substr(temp.size()-suffix.size())))
            cout << "DA" << endl;
        else    cout << "NE" << endl;
    }
}

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

9375 패션왕 신해빈  (0) 2023.07.05
2559 수열  (0) 2023.07.05
1159 농구 경기  (0) 2023.07.04
2979 트럭 주차  (0) 2023.07.04