2-E 재귀함수 범위관련 질문 있습니다
안녕허세요 강사님
강사님 풀이 과정을 3번 이상 듣고 코드를 여러번 봤는데도 잘 이해가 안가는 부분이 있어서 질문드립니다!
강사님 코드기준(해설집) 11번째줄과 12번째줄에
for(int i = y; i < y + size; i++){
for(int j = x; j < x + size; j++){이렇게 i 와 j 의 범위를 나누셨는데
왜 y가 0 일때 모든 x 값 비교하고 재귀하고
이런식으로 만든 이유가 궁금해서 질문합니다.
왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래 이렇게 한 묶음으로 검사를 하고 그 값을 return 하고 해야 맞지 않나요 ?
제가 풀었던 범위 나누기와 달라서 너무 헷갈려서 질문합니다.
#include <iostream>
using namespace std;
// 좌상 우상 좌하 우하
const int dy[4] = { -1, -1, 0, 0 };
const int dx[4] = { -1, 0, -1, 0 };
int N;
char adj[65][65];
string ret;
string QuardTree(int y, int x, int n)
{
string str;
if (n == 1)
return str += adj[y][x];
n = n >> 1; // n -> 2
for (int i = 0; i < 4; i++)
{
int ny = y + dy[i] * n; // 2 --> 1
int nx = x + dx[i] * n;
str += QuardTree(ny, nx, n);
}
if (str == "0000")
str = "0";
else if (str == "1111")
str = "1";
else
str = "(" + str + ")";
return str;
}
int main()
{
cin >> N;
for (int y = 1; y <= N; y++)
{
string temp;
cin >> temp;
for (int x = 1; x <= temp.size(); x++)
adj[y][x] = temp[x - 1];
}
ret += QuardTree(N, N, N);
cout << ret;
return 0;
}혹시 질문이 이해가 안가실까봐 제 코드 풀이도 올려요
답변 1
0
안녕하세요 가인님 ㅎㅎ
왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래 이렇게 한 묶음으로 검사를 하고 그 값을 return 하고 해야 맞지 않나요 ?
>>
for(int i = y; i < y + size; i++){
for(int j = x; j < x + size; j++){
if(b != a[i][j]){
ret += '(';
ret += quard(y, x, size / 2);
ret += quard(y, x + size / 2, size / 2);
ret += quard(y + size / 2, x, size / 2);
ret += quard(y + size / 2, x + size / 2, size / 2);
ret += ')';
return ret; 사실 제가 한 코드가 그런 의미입니다. 왼위, 오위 등을 나눠서 검사하고 해당 값을 더해서 return 하고 있습니다.
for(int i = y; i < y + size; i++){
for(int j = x; j < x + size; j++){ 물론, 해당 함수마다 왼위, 오위, 오아 등의 범위를 정해서 해도 되지만 저렇게 하나의 꼭지점, 왼위를 기반으로 잡는게 더 쉽기 때문에 저렇게 한 것입니다.
그리고 가인님 코드리뷰를 좀 하자면
string QuardTree(int y, int x, int n)
{
string str;
if (n == 1)
return str += adj[y][x];str이 지역변수로 선언되었는데 이렇게 되면 str에 쓰레기값이 들어갈 수 있습니다.
string str = "";
로 할당하셔야 합니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
6-H 체점 관련 질문
0
6
0
채점서버 연결 관련 질문입니다
0
31
1
삼성 s직군
0
31
0
삼성 코테 없어짐
0
81
1
코딩살구클럽 가입부탁드립니다
0
40
2
코딩살구클럽 가입 요청 확인부탁드립니다
0
35
2
5-S 테스트 케이스 질문
0
37
2
코살 문제풀이 환경
0
54
2
2 - T 오큰수 문제가 있는 것 같습니다.
0
46
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
58
1
살구클럽가입 요청드려요
0
42
2
1-I 문제 질문
0
46
2
코딩살구클럽 가입
0
61
2
AI 코딩 도구 사용 시 학습 방법 조언
0
56
2
코딩살구클럽 오류
0
67
2





