본문 바로가기
SW/문제은행

[C/C++] 정올 - 별삼각형 #1523 #1719 #1329

by FastBench 2024. 4. 23.

문제

삼각형의 높이 n과 종류 m을 입력 받은 후 다음과 같은 삼각형 형태로 출력하는 프로그램을 작성하시오.

풀이

기본적으로 모두 푸는 방법은 동일한데, 행렬을 만들어서 별을 집어넣을 필요는 없다.

빈 공간은 모두 공백을 출력함으로써 해결 가능하기 때문이다.

 

for 루프시에는 행렬처럼 0부터 시작시키는게 아니라, 1부터 시작을 시키는게 생각이 편하다.

 

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

처음부터 n개를 채우고, 점차 하나씩 줄여나가면 된다.

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

 

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

 

 

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

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

마찬가지로 규칙 1,2로 나누어 2개씩 감소, 2개씩 증가를 구현한다.

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

규칙2에서 공백의 개수는 n/2 개로 같다.

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

마찬가지로 규칙1, 규칙 2로 나눈다. 그리고 공백과 별을 따로 따로 출력한다.

별의 경우 2개씩 증가, 2개씩 감소하므로 2*(i-1) 과 같이 기준을 잘 정의한다.

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

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

 

 

결과

생략

 

댓글