View

피라미드 쌓기

moonz 2020. 6. 29. 15:21

이중 for문을 이용해서 피라미드를 만들어보자.

[사용 언어: C]

1단계

	for (int i = 0; i < num; i++) {
		for (int j = 0; j < i+1; j++) {
			printf("*");
		}
		printf("\n");
	}

피라미드를 쌓으려면 이중for문을 이용하여 한줄마다 문자를 하나씩 더 추가하여 출력하면 된다.

그러나 이건 피라미드 모양이 아니다.


2단계

	for (int i = 0; i < num; i++) {
		for (int j = num; j > i+1; j--) {
			printf("#");
		}
		printf("\n");
	}

for문에서의 조건을 조금 바꿔보자.

1단계에서 반전된 모양의 삼각형 형태가 나온다.

 

피라미드 모양을 출력하려면,

첫째줄에서는 4개의 공백과 1개의 문자

두째줄에서는 3개의 공백과 3개의 문자...

이런 식으로 출력해야한다.

 

즉, 위 두 모양을 합치면 되겠다.


3단계

	for (int i = 0; i < num; i++) {
		for (int j = num; j > i+1; j--) {
			printf(" ");
		}
		for (int j = 0; j < 2*i + 1; j++) {
			printf("*");
		}
		printf("\n");
	}

피라미드 형태가 완성되었다.

여기서 단순히 1단계와 2단계를 합치는것만으로는 반쪽짜리 모양이 나오니 주의하자.

그래서 *를 출력하는 조건에서 2*i를 써야한다.

 

첫번째 for문에서 i의 값이 반복마다 1씩 증가하기에, 그 하위 for문의 조건도 반복횟수마다 달라진다.

이중 for문에선 이러한 방식의 응용으로 더 복잡한 기능을 하는 코드를 구현할 수 있다.


응용하기

피라미드 두개를 합쳐 마름모를 만들어보자.

// 첫번째 피라미드
    for (int i = 0; i < num; i++) {
		for (int j = num; j > i+1; j--)  printf(" ");
		for (int j = 0; j < 2*i + 1; j++) printf("*");
		printf("\n");
	}

// 두번째 피라미드
	for (int i = num-1; i > 0; i--) {
		for (int j = num; j > i; j--)  printf(" ");
		for (int j = 2*i-1; j > 0; j--) printf("*");
		printf("\n");
	}

첫번째 피라미드는 지금까지의 과정과 동일하다.

두번째 피라미드는 조건을 바꿔 반전된 모양을 출력하도록 하면 되겠다.


Python

피라미드 모양을 파이썬으로 만들어보자.

코드는 위의 과정에 비해 훨씬 직관적이고 간단하다.

num = 5;
for i in range(1,num+1):
    print(' '*(num-i),'*'*(2*i-1))

 

마름모는 다음과 같다.

for i in range(1,num+1):
    print(' '*(num-i),'*'*(2*i-1))

for i in range(num-1,0,-1):
    print(' '*(num-i), '*'*(2*i-1))

 

'Memo' 카테고리의 다른 글

MS HackaLearn 참가 후기  (0) 2021.08.14
[Python] 효율적인 문제해결을 위한 Memoization  (1) 2021.04.15
해커랭크 입문  (1) 2021.03.02
[Python] 대표적인 정렬 알고리즘  (0) 2021.01.27
Share Link
reply
«   2025/02   »
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