프로그래밍을 처음 배울 때 한번씩은 해 보는 별 찍기.
사각형으로 한번 찍어보고 삼각형으로 넘어갔던 것 같다.
그땐 마침 반복문을 배운 때였으니 별 찍기로 향하는 것은 당연했으리라.
코드를 이렇게 작성했었다.
#include <iostream>
int main() {
int width = 10; // 직사각형의 가로 길이
int height = 5; // 직사각형의 세로 길이
// 세로 길이만큼 반복
for (int i = 0; i < height; ++i) {
// 가로 길이만큼 반복
for (int j = 0; j < width; ++j) {
std::cout << "*";
}
std::cout << std::endl; // 한 줄 출력 후 줄 바꿈
}
return 0;
}
반복문을 활용한 정석적인 직사각형 별 찍기다.
지금 생각해 보니 이거보다 더 효율적인 방법이 있었다.
가로길이만큼의 문자열을 담은 변수를 선언하고 그걸 세로길이만큼 반복하면 된다.
#include <iostream>
#include <string>
using namespace std;
int main(void) {
int a;
int b;
cin >> a >> b;
string tmp(a, '*');
for(int i = 0; i < b; ++i)
cout << tmp << '\n';
return 0;
}
코드가 훨씬 보기 좋아졌고 효율적이다.
``*``로 초기화 된 크기 ``a``의 문자열 변수 ``tmp``를 세로길이 ``b``만큼 반복한다.
그리고 줄 바꿈을 위해 ``endl``을 쓰는 것이 아닌 ``\n``를 사용해 플러싱 오버헤드를 줄였다.
처음 문제를 봤을 때, ``memset``을 통해 배열을 하나 선언한 후 그걸 반복할 생각을 했는데,
문제에 접근하는 사고방식이 달라진 것을 새삼 체감했다.
'Camp > T.I.L.' 카테고리의 다른 글
[TIL #1] 명세 (0) | 2024.08.05 |
---|---|
[TIL #20] 3진법 뒤집기 (0) | 2024.07.22 |
[TIL #18] 약수의 개수와 덧셈 (0) | 2024.07.12 |
[TIL #17] 가운데 글자 가져오기 (0) | 2024.07.11 |
[TIL #16] 없는 숫자 더하기 (0) | 2024.07.10 |