백준9996번 질문드립니다.
123
작성한 질문수 15
#include <bits/stdc++.h>
using namespace std;
int num;
string pattern;
string fileName;
int asteridIndex=0;
int isValid;
vector<char> patternFront;
vector<char> patternBack;
vector<string> output;
int checkValid(string fileName){
string fileNameReverse;
fileNameReverse=fileName;
reverse(fileNameReverse.begin(),fileNameReverse.end());
for(size_t i = 0; i<patternFront.size(); i++){
if(fileName[i]==patternFront[i])continue;
else{return 0;}
}
for(size_t i = 0; i<patternBack.size(); i++){
if(fileNameReverse[i]==patternBack[i])continue;
else{return 0;}
}
return 1;
}
int main()
{
cin>>num;
cin>>pattern;
for(size_t i=0; i<pattern.size(); i++){
if(pattern[i]=='*'){asteridIndex=i;
continue; // 이번껀 패턴으로 저장 안하고, 다음 문자로 넘어가기 위해
}
if(asteridIndex==0){
patternFront.push_back(pattern[i]);
}else if(asteridIndex!=0){
patternBack.insert(patternBack.begin(), pattern[i]);
}
}
for(int i = 0; i<num; i++){
cin>>fileName;
isValid=checkValid(fileName);
if(isValid==0){output.push_back("NE");}
else if(isValid==1){output.push_back("DA");}
}
for(auto o:output){cout<<o<<"\n";}
return 0;
}
입력 -> 출력은 알맞게 되는데 백준에선 계속 틀렸습니다가 나옵니다.
답변 2
1
안녕하세요 ㅎㅎ
제가 수강생님 코드 기반으로 해서 다듬어봤는데요. 이렇게 고치시면 됩니다.
#include <bits/stdc++.h>
using namespace std;
int num;
string pattern;
string fileName;
int asteriskIndex = -1;
vector<char> patternFront;
vector<char> patternBack;
vector<string> output;
bool checkValid(const string& fileName) {
if (asteriskIndex == -1) {
return fileName == pattern;
}
if (fileName.size() < patternFront.size() + patternBack.size()) {
return false;
}
for (size_t i = 0; i < patternFront.size(); i++) {
if (fileName[i] != patternFront[i]) {
return false;
}
}
for (size_t i = 0; i < patternBack.size(); i++) {
if (fileName[fileName.size() - patternBack.size() + i] != patternBack[i]) {
return false;
}
}
return true;
}
int main() {
cin >> num;
cin >> pattern;
asteriskIndex = pattern.find('*');
for (size_t i = 0; i < asteriskIndex; i++) {
patternFront.push_back(pattern[i]);
}
for (size_t i = asteriskIndex + 1; i < pattern.size(); i++) {
patternBack.push_back(pattern[i]);
}
for (int i = 0; i < num; i++) {
cin >> fileName;
bool isValid = checkValid(fileName);
if (isValid) {
output.push_back("DA");
} else {
output.push_back("NE");
}
}
for (const auto& o : output) {
cout << o << "\n";
}
return 0;
}
그리고 다음 질문 때는 들여쓰기좀 부탁드립니다 ㅠㅠ 디버깅하는데 힘들었습니다.. ㅠㅠ
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다. wldls317님, 문의하신 백준 9996번 문제와 관련하여 비슷한 상황에서 질문을 하셨던 다른 수강생 분의 경우와 해당 질문에 대한 지식공유자님의 답변을 참조하여 도움을 드리고자 합니다.
백준 9996번 한국이 그리울 땐 서버에 접속하지 문제는 패턴 매칭 문제로, ‘’ 문자를 활용하여 문자열의 시작 부분과 끝 부분이 주어진 패턴과 일치하는지 여부를 확인하는 문제입니다. 질문하신 코드의 로직을 간단히 살펴보면, ‘’ 문자를 기준으로 패턴을 앞부분(patternFront)과 끝부분(patternBack)으로 나누어 입력받은 fileName이 해당 패턴과 일치하는지 검사하는 함수(checkValid)를 구현하셨네요.
다만, 이 문제를 해결할 때 주의해야 할 점 중 하나는 ‘*’ 문자를 기준으로 패턴을 나눈 뒤, 입력받은 문자열(fileName)이 패턴의 앞부분과 끝부분에 정확하게 일치하는지 확인해야 하며, 중간에 어떤 문자가 와도 상관없지만, 패턴의 앞부분과 끝부분이 입력 문자열에 정확히 위치해야 한다는 것입니다.
실제 코드에서 실수하기 쉬운 부분은 반드시 전체 패턴 길이(별표 포함)와 입력 문자열 길이를 고려하여 패턴이 입력 문자열 안에 적절히 위치할 수 있는지 확인해야 하며, 패턴의 뒷부분 매치를 확인할 때 패턴과 입력 문자열의 뒤에서부터 일치하는지 확인해야 합니다.
지금까지의 설명과 비슷한 상황에서 질문하셨던 다른 수강생 분들의 경우가 있었으며, 아래는 해당 질문과 관련된 피드백 링크입니다:
이 답변들에서는 반례와 코드 분석을 기반으로 수정해야할 부분에 대한 구체적인 조언이 제시되어 있습니다. 비록 정확한 코드 구현 방법이나 로직은 달라질 수 있지만, 해당 내용들을 통해 문제의 이해를 깊게 하고 코드의 오류를 찾는데 도움이 될 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
코딩살구클럽 문의
0
7
1
코딩살구클럽 승인
0
18
2
DP 경우의 수 설명이 이해가 되지 않습니다.
0
27
2
3-F 채점 관련 질문
0
24
1
BFS, DFS 활용이 되는 상황에서의 방향성
0
28
2
코딩살구클럽 승인
0
41
2
코딩살구클럽승인
0
33
3
코딩살구클럽 승인
0
48
2
3-D 관련 질문
0
35
2
코살구 회원가입 문의
0
43
2
코살구 로그인 문제
0
65
2
3-A 문제 풀이 관련 질문
0
53
3
2-O 질문 있습니다
0
38
2
2-T 문제에 관한 질문
0
40
2
코딩 살구 클럽 접속 및 사용방법 문의
0
61
2
안녕하세요~. 현재 코살코딩클럽 사이트가 접속이 안됩니다~
0
64
2
코딩살구클럽 로그인문제
0
78
3
코딩 살구 클럽 로그인 문제
0
82
2
2-J 채점관련 질문
0
65
3
코딩 살구 클럽 Python 지원 가능 여부
0
77
1
살구클럽 아이디 없음 문제
0
76
1
1-O 코딩살구클럽 채점관련 질문
0
60
2
히든 테스트 케이스가 사라졌습니다
0
57
1
채점서버 혹시 다른 언어 지원도 가능하게 해주실 수 있나요
1
74
2





