1-M 좋은단어 반례를 찾아보고싶습니다!
강의를 듣기전에 제가 먼저 문제를 해결해보고, 강사님의 풀이방법이랑 비교하는식으로 학습중에 있습니다.
1-M 좋은단어 푸는 도중 백준의 반례 예시
BABBAB
ABBABB
ABBBBA
AAAAABBAAAAA
이경우를 다 해봤는데도 안되서, 강사님 풀이를 보기 전에 제힘으로 해결해보고자 하는데 반례 찾기에 도움을 여쭐수 있을까요?
아래는 코드입니다
#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#include<vector>
using namespace std;
int main()
{
ios::ios_base::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
int count = 0;
bool check = true;
for (int i = 0; i < n; i++)
{
string temp;
cin >> temp;
int cnt2=0;
check = true;
if (temp.length() % 2 == 1)
continue;
while (check && temp.length())
{
if (temp[0] == 'A')
{
if (temp[temp.length()-1] == 'A')
{
temp.erase(temp.length() - 1, 1);
temp.erase(0, 1);
}
else
{
int loc = temp.find('A', 1);
if (loc % 2 == 0 or loc == -1)
check = false;
else
{
temp.erase(loc, 1);
temp.erase(0, 1);
}
}
}
else
{
int end = temp.length() - 1;
if (temp[temp.length()-1] == 'B')
{
temp.erase(temp.length() - 1, 1);
temp.erase(0, 1);
}
else
{
int loc = temp.find('B', 1);
if (loc % 2 == 0 or loc == -1)
check = false;
else
{
temp.erase(loc, 1);
temp.erase(0, 1);
}
}
}
}
if(check)
count++;
}
cout << count;
system("pause");
return 0;
}
답변 1
2
안녕하세요. 안형준님ㅎㅎ
먼저 자신의 힘으로 코드를 구축하려고 하는 것은 잘했습니다.
하지만 코드 상에 틀린 점이 있습니다.
1. 시간복잡도가 너무 큽니다. 이 문자열의 최대길이는 10만이고. 형준이님이 짠 코드의 시간복잡도는 얼마일까요?
N^2인데요? 매번 문자열 전체를 확인하고 있어요(find함수를 씀)
2. 틀린 로직이 있습니다. 자 예를 들어
BBAABAAB
를 들어보죠.
이 문자열은 BB / AA / B...B / .AA. 이렇게 연결해야 좋은 단어입니다.
하지만 형준님의 코드는 그렇지가 않죠.
B.......B연결하고
.B...B 연결하고 그렇게 해서 삭제되어 남은 AAAA 중에서
그 다음 A.....A 이렇게 연결해 버리는 즉, "끝점의 우선순위"가 높게 설정되어있기 때문에
(AAAA이렇게 되어있을 때 A...A를 먼저 연결해버리는.)
문제의 의도와는 다르게 틀리게 되는 것이죠.
자 그렇게 연결하면 B가 중간에 섞여있기 때문에 나쁜단어가 되어버리죠?물론 코드를 구동하게 되면 "맞는 답"으로 나오지만 이건 형준님의 로직과는 전혀 상관없이 AAAA라는게 나와서 결국 모두 erase가 되서 맞게 나오는 것 뿐입니다. 문제에서 "교차하지 말고"라고 되어있다면 교차하지 않게 짝을 짓게 해야하는 것이죠.

위 그림처럼 말이죠.
아 그리고 인프런 에디터가 좀 안좋습니다. 그렇기 때문에 앞으로 코드 올려주실 때 VSCODE등 에디터에 있는 내용을 그대로
복사해서 붙여넣기해서 보내주세요. 제가 올린 것처럼 말이죠.
지금 올려주신 내용처럼 올려주시면... 정말 코드 보기가 힘들어요 ㅜ
또 질문사항있으시면 언제든 말씀 부탁드립니다.
감사합니다.
강사 큰돌 올림.
1-E질문입니다!
0
515
2
3-L 틀린 부분 피드백 부탁드립니다.
0
815
2
1-A문제 순열재귀함수 질문입니다.
0
380
1
1-A 일곱난쟁이문제입니다
0
454
1
문제 풀 때 방향성에 대해
0
796
1
맥에서 vs code로 실행 관련 질문입니다
0
520
1
17071번 메모리 초과
0
384
1
1-C질문입니다!
0
416
2
2-B BFS 시간초과질문
0
628
2
1-O 13번 라인
0
437
1
6-J 놀이공원 문제 질문
0
379
1
구현관련 질문
0
481
1
강의 교안
0
316
1
실력을 더 올리고나서 강의를 보는 것이 맞을까요?
0
544
1
안녕하세요! 재귀함수에 관해서 질문드립니다
0
534
1
1-K
0
471
2
3-G번 질문있습니다.
1
468
3
3-C 실행 시간 질문드립니다.
0
491
1
4-A 문제 풀이 질문있습니다.
0
589
2
비트마스킹 연산자 "1의 보수" 영문 표기법
0
433
1
격자탐색 문제에서 BFS 시간복잡도 질문드립니다.
0
332
1
3-O go 함수 질문 드립니다.
1
441
2
4-A 출력 질문
0
301
1
1주차 1-O 질문드립니다
0
253
1





