프로그래밍/코딩 테스트 연습

[백준] 2439번 : 별 찍기 - 2 (3단계) (C++)

w_w 2024. 1. 11. 09:30

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

 


 

문제

 

 

 

 

 

해석

 

별 찍기 - 1과 같이 별의 반복과 줄의 반복을 하면 되지만 여기서 공백문자가 추가됨을 이용해야 합니다.

 

 

 

 

 

 

풀이

 

별의 수를 입력받고 줄을 별의 수만큼, 각 줄에는 별이 순차적으로 증가시키는 코드는 다음과 같습니다.

 

int main() {
	int x;
	cin >> x;

	for (int i = 1; i <= x; i++) {
		for (int j = 0; j < i; j++) {
			cout << "*";
		}
		cout << '\n';
	}
}

 

하지만 문제의 출력처럼 별이 오른쪽 기준으로 나오는 게 아니라 왼쪽 기준으로 출력되는데 이유는 값을 출력할 때 왼쪽에서 오른쪽으로 출력하기 때문입니다.

 

이 문제를 해결하기 위해서는 단순히 도 "공백" 문자를 반복시켜 출력하면 됩니다.

 

즉, 각 줄마다 *의 수를 역순으로 출력하면 됩니다.

 

for (int k = x-1; k >= i; k--) {
	cout << " ";
}

 

각 줄마다 다음 코드를 실행시키면 공백이 순차적으로 감소하면서 출력됩니다.

 

최종적인 코드는 다음과 같습니다.

#include<iostream>
using namespace std;

int main() {
	int x;
	cin >> x;

	for (int i = 1; i <= x; i++) {
		for (int k = x-1; k >= i; k--) {
			cout << " ";
		}

		for (int j = 0; j < i; j++) {
			cout << "*";
		}
		cout << '\n';
	}
}

 

 


 

정리

 

정렬 순서를 바꾸는 방법 중 공백을 같이 출력하는 방법을 연습할 수 있었습니다. 또한 반복문안의 반복문 구조로 for문의 작동을 이해할 수 있었습니다.