본문 바로가기
Online-Judge/Baekjoon

[BOJ] C++ 2439번 별 찍기 - 2

by nyangzzi 2021. 5. 15.
반응형

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

 

2439번: 별 찍기 - 2

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

www.acmicpc.net

 

 

출력해야할 라인의 수 i는 N번 반복해야한다.

for (int i = 1; i <= N; i++) {
		
    /*
    여기에 각 라인마다 출력할 코드 넣기
    */
       
    cout << endl;	//한 줄 출력 한 뒤에 내리기
}

 

각 라인의 별은 오른쪽으로 정렬하여 출력해야하는데,

이때 왼쪽의 공백 영역오른쪽의 별 영역으로 나누어 생각할 수 있다.

 

왼쪽의 공백 영역의 경우, 각 라인에서 출력해야할 공백의 수는 다음과 같다.

(입력 N) - (오른쪽 별의 개수)

오른쪽 영역 별의 개수는 해당 라인의 넘버 i와 동일하므로 i+1부터 N까지 반복하면 공백의 수가 된다.

for (int j = i+1; j <= N; j++) {
	cout << " ";
}

 

 

오른쪽의 별 영역의 경우, 해당 라인의 넘버와 동일하므로 i번만큼 반복한다.

for (int k = 1; k <= i; k++) {
	cout << "*";
}

 


[주의 할 점]

공백을 하나 더 출력하지 않도록 주의해야한다.

 

[잘못된 코드]

for (int i = 1; i <= N; i++) {

// 공백은 N-(각 라인의 별의 개수)개만큼 출력필요
	for (int j = i; j <= N; j++) {  //N-(각 라인의 별의 개수)+1만큼 반복                                      
		cout << " ";
	}
	for (int k = 1; k <= i; k++) {
		cout << "*";
        }
	cout << endl;
}

이럴 경우 다음과 같이 공백을 하나 더 출력한다.


 

[BOJ-2539.cpp]

#include <iostream>
using namespace std;

int main() {
	int N = 0;
	cin >> N;

	for (int i = 1; i <= N; i++) {
		for (int j = i+1; j <= N; j++) {
			cout << " ";
		}
		for (int k = 1; k <= i; k++) {
			cout << "*";
		}
		cout << endl;
	}

}
반응형

'Online-Judge > Baekjoon' 카테고리의 다른 글

[BOJ] C++ 2441번 별 찍기 - 4  (0) 2021.05.15
[BOJ] C++ 2440번 별 찍기 - 3  (0) 2021.05.15
[BOJ] C++ 2438번 별 찍기 - 1  (0) 2021.05.14
[BOJ] C++ 2739번 구구단  (0) 2021.05.14
[BOJ] C++ 2742 기찍N  (0) 2021.05.14

댓글