티스토리 뷰

void loop(int n, int m) {
	if(n==0) {
        printf("%c",(m>0)?'-':' ');
        return 0;
    }
	loop(n-1,m);
	loop(n-1,0);
	loop(n-1,m);
	return 0;
}

int main() {
	int n;
	while(~scanf("%d",&n)){
		loop(n,1);
		printf("\n");
	}
}

 

풀이 : 재귀, 분할정복

 

0. n을 입력받습니다 EOF가 c언어에서 -1 0xFFFF 인 것을 이용하여 ~ not 비트 연산을 하여 EOF가 입력받으면 입력을 종료합니다.

 

1. 재귀를 사용합니다.

 인자

 n : 0이되면 출력을 합니다.

 m : 1이면 '-', 0이면 ' ' 을 출력하도록 합니다.

 

 n>0 인 경우 loop를 세번 반복합니다. 단 두번째 루프만 m의 값을 0으로 해줍니다.

 m=0 이 되면, 하위 loop 함수들 또한 전부 m값은 0이 됩니다.

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함