해결된 질문
작성
·
165
·
수정됨
0
안녕하세요 선생님! 강의 보기 전에 직접 풀어봤는데요, 테스트 케이스도 정답대로 잘나오지만 백준에서는 틀렸다고 나옵니다 ㅠㅠ
파일 개수 입력
패턴 입력
파일 입력
패턴의 첫 번째/마지막 문자와 파일의 첫 번째/마지막 문자가 같다면 DA출력, 아니면 NE출력
몇 번을 확인해봐도 설계에 문제는 없어보이는데요, 어디가 틀려서 오답처리가 되는걸까요?
http://boj.kr/8b7b4a2668c0446a92b0c459e4c67c77
#include <iostream>
using namespace std;
int cnt;
string pattern;
string input[100];
int main()
{
cin >> cnt;
cin >> pattern;
for (int i = 0; i < cnt; i++)
cin >> input[i];
for (int i = 0; i < cnt; i++)
{
if (pattern[0] == input[i][0] && pattern[pattern.size() - 1] == input[i][input[i].size() - 1])
cout << "DA" << endl;
else
cout << "NE" << endl;
}
return 0;
}
답변 2
1
안녕하세요, 인프런 AI 인턴입니다.
한유태님의 질문 내용을 분석해본 결과, “1G (백준 9996번)문제 반례 받을 수 있을까요?” 질문과 유사한 상황에 대한 답변이 있습니다. 이 답변에서는 큰돌 강사님이 문제 해결에 있어 중요한 포인트를 설명하십니다.
백준 9996번 한국이 그리울 땐 서버에 접속하지 문제에 대해 질문해주셨는데, 이 문제는 간단한 문자열 처리 문제로 보이지만 주어진 패턴을 정확하게 이해하고 구현하는 데 주의가 필요합니다. 패턴이 ‘*’ 문자를 포함하여 복잡한 조건을 가지고 있다는 점, 해당 조건을 정확하게 구현하기 위해선 문자열의 시작과 끝을 넘어서 전체 패턴 일치 여부를 판단하는 논리가 필요하다는 점이 핵심입니다.
문제점은, 간단히 패턴의 시작과 끝 문자만을 체크하는 로직으로는 모든 케이스를 정확하게 판단할 수 없다는 것입니다. 예를 들어 패턴이 ‘ac’와 같이 주어지고 파일 이름이 ‘abc’일 경우, 단순히 시작과 끝 문자만을 비교하는 로직으로는 ‘DA’를 출력하지만, 사실은 패턴과 일치하지 않습니다. 이는 ‘‘가 나타내는 “모든 문자열”을 올바르게 처리하고 있지 않기 때문입니다.
해당 문제를 해결하기 위해서는 ‘*’ 문자를 기준으로 패턴을 두 부분으로 나누고, 각 부분이 파일 이름의 시작과 끝 부분에 각각 일치하는지를 확인하는 로직이 필요합니다. 1-G 문제 질문입니다.에서는 유사한 문제를 다루면서 괄호가 누락되어 split 함수가 예상대로 작동하지 않는 문제를 지적하고, 수정 방안을 제시합니다.
한유태님의 경우에도 패턴의 ‘‘를 처리하는 방식에 주의를 기울여 알고리즘을 수정해야 합니다. 패턴의 시작과 끝 문자만을 비교하는 것이 아닌, 패턴 안에 있는 ‘‘를 올바르게 처리하여 패턴 전체와 파일 이름이 일치하는지를 체크해야 올바른 결과를 얻을 수 있습니다.
질문의 내용과 강사님의 답변을 종합해보면, 한유태님의 경우 패턴 처리 방식에 문제가 있는 것으로 보입니다. ‘*’ 처리를 통해 문제를 해결해 보시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아이고.. ab*ab같은 경우도 있을텐데 이걸 놓치고 a*b일 경우만 생각했었네요 ㅠㅠ 감사합니다