• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

1-G 질문있습니다!

24.04.11 18:08 작성 24.04.11 18:16 수정 조회수 107

0

안녕하세요 선생님! 강의 보기 전에 직접 풀어봤는데요, 테스트 케이스도 정답대로 잘나오지만 백준에서는 틀렸다고 나옵니다 ㅠㅠ

 

  1. 파일 개수 입력

  2. 패턴 입력

  3. 파일 입력

  4. 패턴의 첫 번째/마지막 문자와 파일의 첫 번째/마지막 문자가 같다면 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 인턴님의 프로필

인프런 AI 인턴

2024.04.11

안녕하세요, 인프런 AI 인턴입니다.

한유태님의 질문 내용을 분석해본 결과, “1G (백준 9996번)문제 반례 받을 수 있을까요?” 질문과 유사한 상황에 대한 답변이 있습니다. 이 답변에서는 큰돌 강사님이 문제 해결에 있어 중요한 포인트를 설명하십니다.

백준 9996번 한국이 그리울 땐 서버에 접속하지 문제에 대해 질문해주셨는데, 이 문제는 간단한 문자열 처리 문제로 보이지만 주어진 패턴을 정확하게 이해하고 구현하는 데 주의가 필요합니다. 패턴이 ‘*’ 문자를 포함하여 복잡한 조건을 가지고 있다는 점, 해당 조건을 정확하게 구현하기 위해선 문자열의 시작과 끝을 넘어서 전체 패턴 일치 여부를 판단하는 논리가 필요하다는 점이 핵심입니다.

문제점은, 간단히 패턴의 시작과 끝 문자만을 체크하는 로직으로는 모든 케이스를 정확하게 판단할 수 없다는 것입니다. 예를 들어 패턴이 ‘ac’와 같이 주어지고 파일 이름이 ‘abc’일 경우, 단순히 시작과 끝 문자만을 비교하는 로직으로는 ‘DA’를 출력하지만, 사실은 패턴과 일치하지 않습니다. 이는 ‘‘가 나타내는 “모든 문자열”을 올바르게 처리하고 있지 않기 때문입니다.

해당 문제를 해결하기 위해서는 ‘*’ 문자를 기준으로 패턴을 두 부분으로 나누고, 각 부분이 파일 이름의 시작과 끝 부분에 각각 일치하는지를 확인하는 로직이 필요합니다. 1-G 문제 질문입니다.에서는 유사한 문제를 다루면서 괄호가 누락되어 split 함수가 예상대로 작동하지 않는 문제를 지적하고, 수정 방안을 제시합니다.

한유태님의 경우에도 패턴의 ‘‘를 처리하는 방식에 주의를 기울여 알고리즘을 수정해야 합니다. 패턴의 시작과 끝 문자만을 비교하는 것이 아닌, 패턴 안에 있는 ‘‘를 올바르게 처리하여 패턴 전체와 파일 이름이 일치하는지를 체크해야 올바른 결과를 얻을 수 있습니다.

질문의 내용과 강사님의 답변을 종합해보면, 한유태님의 경우 패턴 처리 방식에 문제가 있는 것으로 보입니다. ‘*’ 처리를 통해 문제를 해결해 보시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

한유태님의 프로필

한유태

질문자

2024.04.11

아이고.. ab*ab같은 경우도 있을텐데 이걸 놓치고 a*b일 경우만 생각했었네요 ㅠㅠ 감사합니다

0

안녕하세요 유태님 ㅎㅎ

인턴이 잘 답변했네요 ㅎㅎ

그.. 질문하실 때 0주차 : 질문하는 방법 보시고 질문 부탁드립니다.

이게 링크로 가시면 이렇게 떠요 ㅠㅠ

image

한유태님의 프로필

한유태

질문자

2024.04.13

죄송해요 ㅠㅠ 다음번 질문부터는 제대로 질문하겠습니다 ㅠ