본문 바로가기
카테고리 없음

[c언어] 별 찍기(직각 삼각형 모양)

by Hyper하이퍼 2023. 1. 4.
반응형

앞선 글에서 2중 for문의 간단한 모양을 출력하는 방법을 알아보았습니다.

 

이번 글에서는 조금더 심화 된 2중 for문에 대해서 다뤄보겠습니다.

 

앞에서부터 계속 강조해왔지만 2중 for문의 핵심은 i와 j가 담당하는 일을 정의하는 것입니다!!

 

그럼 상기 내용을 염두하고 다음 예제로 바로 들어가보시죠!

 

[직각 삼각형 별 찍기]

위와 같은 모양을 출력하려면 어떻게 해야할까요?

반응형

 

질문을 구체화 해보면 위와 같은 모양을 출력하려면 어떤 문법을 사용해야할까요?

 

더 구체화 하면 2중 for문을 사용해야할꺼 같은데 i와 j가 담당하는 일이 무엇일까요?

 

이렇게 질문을 구체화해 나가면 무엇부터 코딩을 해야할지 감이 잡힙니다.

(지금 부터 사소한 문제라도 질문과 목적을 구체화하는 연습을 해야합니다.)

 

출력 결과물을 보면 총 5개 줄로 이루어져 있습니다. => i는 5번 반복

 

각 줄에 ' * ' 모양이 1개 -> 2개 -> 3개 -> 4개 - > 5개로 증가하는 모습이 보입니다. => i번째 j는 증가하는구나!

 

정리해보면 

 

1. i는 5번 반복(5줄을 출력하기 위해)

2. j는 줄이 바뀔 때마다 1씩 증가. 

 

이렇게 놓고 보면 j가 참 까다롭습니다.. 여기서 2중 for문의 두 번째 핵심이 있습니다.

 

j의 값은 하나씩만 증가하면서 특정 조건에 도달하면 그만하게 되는기 때문에 j만으로는 

 

위의 문제를 해결하기 어렵습니다. 따라서 i를 활용하는 것입니다. 

 

정확히 말하면 i와 j의 관계를 파악하여 i를 활용하는 것입니다.

 

[i와 j의 관계]

i와 j의 관계를 보면 다음과 같습니다. i에 1을 더한 값이 j가 되는 관계입니다. 이 관계를 활용한 코드는 하기와 같습니다.

 

#include <stdio.h>

int main(void) 
{
	// 직각삼각형 모양 별 출력

	int i, j;

	for (i = 0; i < 5; i++) // 1~5 번째 줄을 뜻함(5회 반복)
	{
		for (j = 0; j < i + 1; j++) // i가 0이면 j는 1회반복, i가 1이면 j는 2회 반복...
		{
			printf("*");
		}
		printf("\n");
	}
}

 

 

이렇게 2중 for문에서는 i와 j 각 변수 하나만으로는 변칙적인 상황에 대응을 할 수 없습니다. 

 

따라서 변칙적인 상황에서는 i와 j의 관계를 파악하여 사용해야합니다. 

 

매번 강조하지만 사소한 문제에서 각 변수가 담당하는 일과 변수간의 관계를 파악하는 연습을 해야합니다.

 

반응형