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문의 작동을 이해할 수 있었습니다.
'프로그래밍 > 코딩 테스트 연습' 카테고리의 다른 글
[백준] 10952번 : A+B - 5 (3단계) (C++) (0) | 2024.01.11 |
---|---|
[백준] 2438번 : 별 찍기 - 1 (3단계) (C++) (0) | 2024.01.11 |
[백준] 15552번 : 빠른 A+B (3단계) (C++) (0) | 2024.01.10 |
[백준] 25314번 : 코딩은 체육과목 입니다 (3단계) (C++) (1) | 2024.01.10 |
[백준] 11022번 : A+B - 8 (3단계) (C++) (0) | 2024.01.10 |