View
이중 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 |
reply