문제 URL:
2439번: 별 찍기 - 2
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.
www.acmicpc.net
다음 문제는 출력 화면에 별('*') n개를 찍는 문제로, 아래와 같이 별 문자 앞에 공백을 두고 출력해야 한다.
(n=5일 때 실행 결과)
*
**
***
****
*****
이 문제에서 별을 반복하는 부분은 이중 반복문을 이용하여 풀면 어렵지 않게 풀 수 있었다.
하지만 공백을 나타내는 부분에서 약간의 문제가 있었는데,
처음에 이 문제를 보자마자 출력 공간을 확보할 수 있는 setw()함수가 떠올라서,
문제를 풀기 위해 setw()함수를 이용하려고 했다.
하지만 한 줄에 나타난 별 문자 하나하나는 반복문을 사용하여 출력했기 때문에,
setw()함수는 내부 반복문에서 첫 번째로 출력된 별 문자 하나에만 적용되었다.
더보기
setw()함수를 사용한 잘못된 코드
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n;
cin >> n;
for(int i=0; i<n; i++)
{
cout << setw(n);
for(int j=0; j<i+1; j++)
cout << '*';
cout << '\n';
}
}
출력 결과 (n=5일 때)
*
**
***
****
*****
이와 같은 시행착오를 겪고, 공백 문자를 사용하여 풀어야겠다는 생각이 들어
아래의 코드와 같이 내부 반복문을 두 번 작성하여 출력 결과를 완성시켰다.
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
for(int i=0; i<n; i++)
{
for(int j=n-(i+1); j>0; j--)
cout << " ";
for(int j=0; j<i+1; j++)
cout << '*';
cout << '\n';
}
}