프로그래밍/코딩 테스트 연습
[백준] 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문의 작동을 이해할 수 있었습니다.