순환을 이용한 트리그리기(수정)

2022. 5. 26. 14:17개발자 과정/C,C++

문제 자체는 잘 해결이 된다만 범위를 벗어나면 트리가 예쁘게 그려지지 않는게 조금 흠이다.

그렇지만 트리 모양을 위해 2배수로 늘어나는 동작 때문에 다른 방안이 있는지는 잘 모르겠다.

//이 코드는 문제 자체는 답이 나오지만 문제가 요구하는 로직이 아니라서 잘못된 풀이이다.
동적 계획법을 활용해야 하므로 동적계획법을 활용한 코드로 현재 글에 업데이트한다.
-수정본-까지 내려가면 정답 코드가 있다.//

#include <cstdio>

int loop = 1;

void draw_tree(int row, int left, int right) {//순환 호출//
	if (row==4) { return; }
	else {
		left = right/2;//left라고 쓰라길래 썼지만 정작 left라는 이름에 맞게 쓴지는 모르겠다.//
        //일단 최대 범위의 나누기 2의 값을 넣는다//
		int lapf = 0;
		for(int lapf=0;lapf<loop;lapf++){//2배수로 늘어나는 전역변수 loop만큼 코드가 실행된다//
			for (int i = 0; i < right; i++) {
            //최대 범위까지 i++//
				if (i == left) {//left의 값과 같아지면 그곳은 'X'로 표시//
					printf("X");
				}
				printf("-");//그렇지 않으면 '-'로 표시//
			}
		}printf("\n");
		loop *= 2;//loop를 두 배로 올린다//
		right = right / 2;//최대 크기는 나누기2를 한다//
		return draw_tree(row + 1, left,right);//행을 ++하며 순환호출//
	}
}

int main() {
	int row=0//행//, left=0//왼쪽범위//, right=39;//오른쪽 범위//
	draw_tree(row, left, right);
}

꽤 재밌는 문제였다. 이 다음이 트리라는 걸 배우는 파트던데 대학원 형들 센스쟁이ㅋㅋ

-여기까지가 이전 글-

 

 

-수정본-

#include <cstdio>

char tree[40];
void draw_tree(int row, int left, int right) {
	if (row==0) {
		tree[(left + right) / 2] = 'X';
	}
	else {
		int middle = (left + right)/2;
		draw_tree(row-1,left,middle-1);
		draw_tree(row - 1, middle+1, right);
	}
}

int main() {
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 40; j++) {
			tree[j] = '-';
		}
		draw_tree(i, 0, 40);
		for (int j = 0; j < 40; j++) {
			printf("%c", tree[j]);
		}
		printf("\n");
	}
}

처음 푼 문제가 틀렸다고 빠꾸(?)를 맞고, 코드 자체가 자연스러운 트리모양으로 진행 되는 것이 뭐가 있을까 생각해 보았다. 처음 떠오른건 당연히 피보나치 수열! 허나, 순환엔 retrun값이 있어야 한다는 잘못된 생각에 매몰되어서 함수를 두개씩 호출하고 싶어도 그게 답이 될 수 없는건가 하고 있었다. 그러다 선생님이 retrun값은 void인것을 강조하시며 힌트를 알려주셔서 자꾸 retrun신경쓰느라 어떤 코드로 그림을 그릴 것인지 알면서도 못 풀고 있었다는 것을 깨달았다.

나의 단점이라 하면, 어떻게 풀이를 해야 하는 지는 알지만, 그것을 구현하는 것에서 내 생각만큼 안된다는 것인데, 

그것을 알아보셨던 것 같다. 잘 모르겠다, 난 발전하고 있는 것일까? 나의 단점은 보완되어가고 있는 것일까?

난 코딩을 처음 시작했을 때와 지금까지를 비교해 보아서 어떠한 주도적인 전문성을 조금이라도 갖추었을까?

그저 알 수가 없고 부족함 만이 느껴질 뿐이다. 어디선가 꾸준함이나, 정진하는 것 만으로는 개발자로 성장할 수 없다고

말을 하는 것을 보았다. 난 아직 그 결론에 도달하지 않아 나에겐 검증되지 않은 말인데다, 다만, 그럼에도 지금의 내가 할 수 있는 것은 정진밖에 없다.