2-E 분할 정복 반례를 도저히 못찾겠어요
안녕하세요 큰돌님.
2-E 쿼드 트리 문제 반례를 도저히 못찾겠습니다.
97% 쯤인가 여기서 자꾸 실패가 떠요.백준 질문 게시판에 올라가있는 테스트 케이스를 넣어도 다 통과는 하는데 무슨 반례에 걸리는지 도무지 감이 안잡힙니다.
한번 봐주실 수 있나요?
#include <bits/stdc++.h>
using namespace std;
int N, adj[70][70];
string input;
string go(int sy, int sx, int size)
{
int ey = sy + (size - 1);
int ex = sx + (size - 1);
// cout << sy << " " << sx << " " << ey << " " << ex << '\n';
if (size == 2)
{
if (adj[sy][sx] == adj[sy][ex] && adj[sy][ex] == adj[ey][sx] && adj[ey][sx] == adj[ey][ex] && N > 2)
return to_string(adj[sy][sx]);
string subret = "(";
subret += to_string(adj[sy][sx]);
subret += to_string(adj[sy][ex]);
subret += to_string(adj[ey][sx]);
subret += to_string(adj[ey][ex]);
subret += ")";
return subret;
}
string lt = go(sy, sx, size / 2);
string rt = go(sy, sx + size / 2, size / 2);
string lb = go(sy + size / 2, sx, size / 2);
string rb = go(sy + size / 2, sx + size / 2, size / 2);
// cout << "lt: " << lt << " rt: " << rt << " lb: " << lb << " rb: " << rb << '\n';
if (lt.size() == 1 && lt == rt && rt == lb && lb == rb && N > 2)
return lt;
string ret = "(";
ret += lt;
ret += rt;
ret += lb;
ret += rb;
ret += ")";
return ret;
}
int main()
{
cin >> N;
for (int i = 0; i < N; ++i)
{
cin >> input;
for (int j = 0; j < N; ++j)
{
adj[i][j] = input[j] - '0';
}
}
string ret = "";
if (N == 1)
ret = "1";
else
{
ret = go(0, 0, N);
}
cout << ret << '\n';
return 0;
}
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
박희천님의 질문 내용을 잘 살펴보았습니다.
코드를 살펴본 결과, 다음 두 가지 문제가 있어보이며 수정이 필요해 보입니다.
첫 번째, size == 2일 때, N > 2인 경우에 대한 검사가 문제를 일으킬 수 있습니다. size가 2인 경우에는 전체 행렬의 크기 N과 관계없이 해당 부분 행렬의 값을 검사해야 하는데, N > 2로 조건을 걸 경우, 전체 행렬의 크기가 2보다 클 때만 해당하는 것으로 잘못된 로직이 적용되었습니다. 이 조건은 제거해야 할 것 같습니다.
두 번째, 쿼드 트리의 분할 정복 과정에서 최종적으로 하나의 색깔로 이루어진 영역을 검사할 때, 전체 크기인 N을 사용하는 대신 해당 영역의 크기인 size를 사용해야 합니다. lt.size() == 1 && lt == rt && rt == lb && lb == rb 조건은 부분 트리들이 모두 하나의 숫자로만 이루어져 있을 때를 검사하는데, 이때 N > 2 조건은 불필요합니다.
이 두 가지 수정 후에도 문제가 해결되지 않는다면, 본인의 코드를 다시 한 번 꼼꼼히 확인하시거나, 추가적인 반례를 찾아보실 필요가 있습니다. 혹시 모르시는 부분이 있다면 백준 질문 게시판에 다른 사람들의 테스트 케이스를 참고하셔도 좋으며, 직접 다양한 케이스를 만들어 테스트 해보시기를 추천드립니다.
부족한 점 있으시면 언제든지 질문주세요. 화이팅입니다!
채점서버 연결 관련 질문입니다
0
18
1
삼성 s직군
0
18
0
삼성 코테 없어짐
0
67
1
코딩살구클럽 가입부탁드립니다
0
39
2
코딩살구클럽 가입 요청 확인부탁드립니다
0
34
2
5-S 테스트 케이스 질문
0
37
2
코살 문제풀이 환경
0
52
2
2 - T 오큰수 문제가 있는 것 같습니다.
0
45
1
추천 추가문제들
0
44
2
프로그래머스 코테 환경 관련해서 질문드립니다.
0
50
2
해당 문제에 대한 채점이 코딩살구클럽에서 올바르게 처리되지 않습니다.
0
44
2
균형 이진 트리 설명 시 높이 숫자
0
33
2
4-H 질문드립니다.
0
37
2
1-K 질문드립니다.
0
43
2
대기업 인적성 시험 질문
0
43
2
4-C 질문드립니다
0
43
2
[수학숙제 / BOJ 2870] 채점 서버 오작동
0
40
1
코테 준비 질문
0
56
1
살구클럽가입 요청드려요
0
41
2
1-I 문제 질문
0
46
2
코딩살구클럽 가입
0
59
2
AI 코딩 도구 사용 시 학습 방법 조언
0
56
2
코딩살구클럽 오류
0
65
2
코살클 [3-F 괄호 추가하기] 프라이빗 9번 제보
0
51
1





