[백준 BOJ] 2443번 별 찍기 - 6 (C언어)

2022. 1. 20. 00:21PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/2443

 

2443번: 별 찍기 - 6

첫째 줄에는 별 2×N-1개, 둘째 줄에는 별 2×N-3개, ..., N번째 줄에는 별 1개를 찍는 문제 별은 가운데를 기준으로 대칭이어야 한다.

www.acmicpc.net

백준 BOJ 2443번 별 찍기-6 문제 사진

 

접근 방법 - 이중 반복문을 이용한 기본 문제 (별 찍기-5 문제의 변형)

백준의 2443번 문제는 이중 반복문을 응용하는 문제이며, 이는 별 찍기-1 문제의 변형 문제이기도 하다.

하지만 이 문제는 별 찍기-1 문제보다 별 찍기-5 문제와의 연관성이 더 깊기 때문에 이 문제의 링크를 아래에 기재해놓았다.

아래 링크에 별 찍기-1 문제의 링크가 기재되어있으니, 이 또한 함께 참고해보길 바란다.

https://smary-it.tistory.com/27

 

[백준 BOJ] 2442번 별 찍기 - 5 (C언어)

문제 설명 https://www.acmicpc.net/problem/2442 2442번: 별 찍기 - 5 첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제 별은 가운데를 기준으로 대칭이어야 한다. www.acm..

smary-it.tistory.com

 

위의 2442번 문제와 차이점이 있다면, 별의 출력과 공백 출력이 역순이라는 점이다.

따라서, 2442번 문제를 해결했다면 제출한 코드를 살짝 변형만 해서 풀어보아도 무관할 것이다.

필자는 아래처럼 코드를 작성하고 문제를 해결하였다.

 

필자가 이용한 규칙 (2442번에서의 규칙을 뒤집은 형태)

위 예제처럼 5를 입력받은 경우를 중심으로 설명하고자 한다.

- 공백 출력: 첫 번째 행에선 0개의 공백, 두 번째 행에선 1개의 공백, ... , 마지막 행에선 4개의 공백을 출력한다.

따라서, 공백은 행에 따라서 0개 ~ n-1개 출력하게끔 하면 된다.

- 별 출력: 첫 번째 행에선 9개의 별, 두 번째 행에선 7개의 별, ... , 마지막 행에선 1개의 별을 출력한다.

따라서, 별의 출력은 행에 따라서 2*n-1개 ~ 1개 출력하게끔 하면 된다.

 

코드의 실행 순서 (2442번 코드와는 다소 다른 형태임을 참고)

1) 숫자(n)를 입력받는다.

 

2) 이중 반복문을 실행한다. (i: 행, j: 열)

행 번호 i를 제어하는 반복문 안에 공백을 출력하는 반복문, 별을 출력하는 반복문 2개를 순차적으로 작성한다.

- 공백을 출력하는 반복문: 열 번호 j는 0에서부터 i-1까지 점점 증가하는 변수이며, 그 과정에서 공백을 하나씩 출력한다.

- 별을 출력하는 반복문: 열 번호 j는 0에서부터 (n-i)*2-2까지 점점 증가하는 변수이며, 그 과정에서 별을 하나씩 출력한다.

(공백은 처음엔 0개 출력했다가, 행을 거듭하면서 출력하는 횟수를 1씩 늘린다.)

(반면에 별은 처음엔 2*n-1개 출력했다가, 행을 거듭하면서 출력하는 횟수를 2씩 줄인다.)

=> 이 과정을 행 번호 i가 n과 같아질 때까지 실행한다.

 

3) 이중 반복문이 모두 수행되면, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>

//백준 2443번 코드
int main() {
	int n;
	scanf("%d", &n);

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

 

제출 결과

백준 BOJ 2443번 별 찍기-6 문제 C 제출 결과

(2021.12.23 백준 2443번 문제 제출 결과)

반응형