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
11
0
코살에 19942 다이어트 문제에 N의 범위가 빠져있슴니다
0
6
0
진행 방법 질문드립니다!
0
37
2
2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.
0
55
2
2주차 개념#12 트리 순회
0
25
2
백준사이트가 종료된다고 합니다.
0
285
2
백준 서비스 종료
9
885
1
sk 하이닉스 코테 대비
0
367
2
3-G 최댓값 질문
0
50
1
모듈러 연산 값이 10이 아닌 경우도 있지 않나요?
0
83
2
3-I 코드 질문드립니다.
0
62
2
3-N 질문 있습니다.
0
66
2
학습방법
0
102
2
4-H 질문 있습니다 (코드 리뷰)
0
66
2
코딩테스트 어디까지 준비해야 하는지 질문이 있습니다.
0
169
2
2-O 반례가 무엇일지 어떤 부분이 틀렸는지 잘 모르겠습니다.
0
69
2
2주차 개념 #4-2. 인접행렬 질문있습니다.
0
64
2
1-A 문제풀이 후 궁금한 점이 생겨서 질문드립니다.
0
51
2
조합 재귀 풀이 확인 해주시면 감사하겠습니다.
0
68
2
함수별 시간복잡도
0
73
2
3-h 질문입니다.
0
49
1
안녕하세요 선생님. 시간 복잡도 4번 질문있습니다.
0
53
2
1-I 문제 질문 드립니다.
0
76
2
2-P 질문입니다.
0
56
1





