BOJ 1992 : 쿼드트리 - C++ (char[][] 널문자)
쿼드트리
- 깨달음
char[][]
배열로 문자열을 입력받을 때에는
반드시 +1만큼 더 크게 해야한다
--> 마지막에 null문자가 삽입되기 때문에!!!
안그러면 참조가 벗어나서 BOJ에서 메모리 초과라고 뜬다!
코드
[ int 배열로 받을 때 ]
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
// 1:46 ~
string ans="";
int board[64][64];
bool check(int y, int x, int size){
int fix = board[y][x];
for(int i=y;i<y+size;i++)
{
for(int j=x;j<x+size;j++)
{
if(fix != board[i][j]) return false;
}
}
return true;
}
void zip(int y, int x, int size)
{
bool result = check(y, x, size);
if(result)
{
if(board[y][x])
ans += "1";
else ans += "0";
}else if(size > 1){
/* 1사분면 */
ans += "(";
zip(y, x, size/2);
/* 2사분면 */
zip(y, x+size/2, size/2);
/* 3사분면 */
zip(y+size/2, x, size/2);
/* 4사분면 */
zip(y+size/2, x+size/2, size/2);
ans += ")";
}
return;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for (int i = 0; i < N; i++)
{
string S; cin >> S;
for (int j = 0; j < S.length(); j++)
board[i][j] = S[j] - '0';
}
zip(0, 0, N);
cout << ans;
return 0;
}
[ char배열로 받을 때 ]
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
// 1:46 ~
string ans="";
char board[64][64];
bool check(int y, int x, int size){
char fix = board[y][x];
for(int i=y;i<y+size;i++)
{
for(int j=x;j<x+size;j++)
{
if(fix != board[i][j]) return false;
}
}
return true;
}
void zip(int y, int x, int size)
{
bool result = check(y, x, size);
if(result)
{
if(board[y][x] == '1')
ans += "1";
else ans += "0";
}else if(size > 1){
/* 1사분면 */
ans += "(";
zip(y, x, size/2);
/* 2사분면 */
zip(y, x+size/2, size/2);
/* 3사분면 */
zip(y+size/2, x, size/2);
/* 4사분면 */
zip(y+size/2, x+size/2, size/2);
ans += ")";
}
return;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
cin >> board[i][j];
zip(0, 0, N);
cout << ans;
return 0;
}
- 주의할 점 !
for(int i=0;i<N;i++)
cin >> board[i];
: 기존에 입력을 이렇게 받았더니 에디터에서는 잘돌아가는데,
BOJ 제출시 메모리 초과
가 떴다.
-->
이유는??? char[][]
사용시 마지막에 널문자를 고려해야 해서 원하는 크기보다 +1
만큼 더 필요하다!!
Author And Source
이 문제에 관하여(BOJ 1992 : 쿼드트리 - C++ (char[][] 널문자)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@neity16/BOJ-1992-쿼드트리-C-char-널문자
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- 깨달음
char[][]
배열로 문자열을 입력받을 때에는
반드시 +1만큼 더 크게 해야한다
--> 마지막에 null문자가 삽입되기 때문에!!!
안그러면 참조가 벗어나서 BOJ에서 메모리 초과라고 뜬다!
[ int 배열로 받을 때 ]
#include <iostream> #include <vector> #include <cmath> using namespace std; // 1:46 ~ string ans=""; int board[64][64]; bool check(int y, int x, int size){ int fix = board[y][x]; for(int i=y;i<y+size;i++) { for(int j=x;j<x+size;j++) { if(fix != board[i][j]) return false; } } return true; } void zip(int y, int x, int size) { bool result = check(y, x, size); if(result) { if(board[y][x]) ans += "1"; else ans += "0"; }else if(size > 1){ /* 1사분면 */ ans += "("; zip(y, x, size/2); /* 2사분면 */ zip(y, x+size/2, size/2); /* 3사분면 */ zip(y+size/2, x, size/2); /* 4사분면 */ zip(y+size/2, x+size/2, size/2); ans += ")"; } return; } int main() { ios::sync_with_stdio(0); cin.tie(0); int N; cin >> N; for (int i = 0; i < N; i++) { string S; cin >> S; for (int j = 0; j < S.length(); j++) board[i][j] = S[j] - '0'; } zip(0, 0, N); cout << ans; return 0; }
[ char배열로 받을 때 ]
#include <iostream> #include <vector> #include <cmath> using namespace std; // 1:46 ~ string ans=""; char board[64][64]; bool check(int y, int x, int size){ char fix = board[y][x]; for(int i=y;i<y+size;i++) { for(int j=x;j<x+size;j++) { if(fix != board[i][j]) return false; } } return true; } void zip(int y, int x, int size) { bool result = check(y, x, size); if(result) { if(board[y][x] == '1') ans += "1"; else ans += "0"; }else if(size > 1){ /* 1사분면 */ ans += "("; zip(y, x, size/2); /* 2사분면 */ zip(y, x+size/2, size/2); /* 3사분면 */ zip(y+size/2, x, size/2); /* 4사분면 */ zip(y+size/2, x+size/2, size/2); ans += ")"; } return; } int main() { ios::sync_with_stdio(0); cin.tie(0); int N; cin >> N; for(int i=0;i<N;i++) for(int j=0;j<N;j++) cin >> board[i][j]; zip(0, 0, N); cout << ans; return 0; }
- 주의할 점 !
for(int i=0;i<N;i++) cin >> board[i];
: 기존에 입력을 이렇게 받았더니 에디터에서는 잘돌아가는데,
BOJ 제출시메모리 초과
가 떴다.
-->
이유는???char[][]
사용시 마지막에 널문자를 고려해야 해서원하는 크기보다 +1
만큼 더 필요하다!!
Author And Source
이 문제에 관하여(BOJ 1992 : 쿼드트리 - C++ (char[][] 널문자)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@neity16/BOJ-1992-쿼드트리-C-char-널문자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)