[알고리즘/백준] 2439번 :: 별 찍기 - 2 (C++)
문제 ✍🏻 :: [2439번] 별 찍기 - 2
(초록색 글자 클릭 시 문제로 이동)
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제. 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.
알고리즘 (접근방법) 💻
2438번처럼 별 개수를 찍는 문제이다. 2438번 점과 다른 점은 오른쪽 정렬을 하는 것. 공백을 먼저 출력하고 별을 출력한다는 것이다.
별의 개수는 2438번처럼 N행에 N개씩 출력된다. 따라서 별 부분은 2438번과 똑같이 하면 된다. (2438번 풀이 바로 가기)
N행이 증가 할 때 마다 별을 찍는 개수는 1개씩 증가한다. 반면에 공백의 개수는 한 개씩 줄어든다. 그리고 마지막 줄은 N개만큼 출력이 되어야 한다는 것이다.
🚨 참고 🚨
그냥 풀이 할 수 있지만,C와 C++의 표준 입출력 동기화를 끊어주는 방법으로 진행하였다.
(cin.tie(NULL)
은 할 필요가 없다. 입력과 출력이 서로 번갈아 가며 사용되는 내용이 없기 때문!)
자세한 설명은 15552번 풀이에 나와있다. (15552에 대한 설명 바로가기)
💡전체 코드💡
백준 사이트에 제출할 때는 변수명을 i, j, k 이렇게 썼는데, 다른 블로그들을 참고해보니 변수명을 아무렇게나 지으면 안될 것 같은 느낌이 들었다.
변수명에 나름 의미를 줬다. 행은 row
, 별을 출력하는 for 문의 변수는 star
, 공백을 출력하는 for문의 변수는 blank
이다.
변경한 최종 코드 ⬇
#include <iostream>
using namespace std;
int main()
{
//입출력의 반복은 없으므로 cin.tie(NULL);은 쓸 필요 없다.
ios_base::sync_with_stdio(false);
int N, row, star, blank;
cin >> N;
//1행부터 N행까지 반복
for (row = 1; row <= N; row++) {
//공백이 먼저 출력된다. 공백은 N-row 만큼 출력된다.
for (blank = 0; blank < N - row; blank++) {
cout << " ";
}
//공백 이후에 별 출력. 별은 행 개수만큼 출력된다.
for (star = 0; star < row; star++) {
cout << "*";
}
cout << "\n";
}
return 0;
}
회고 🤔
-
다들 쉬운 문제라고 하는데 나는 꽤 애를 먹었다. for문을 하나 더 늘릴 생각을 못했다. 그러면 성능이 저하될 거라고 생각했는지, 이유는 잘 모르겠다.
'공백이 4-3-2-1 순으로 줄어드는 건 알겠는데 별과 어떻게 함께 하지?' 이 생각의 답을 못 찾아 결국 다른 분들의 답을 보았다.
for문을 하나 더 쓰면 되는 간단한 문제였다.
다음부터는 어떤 규칙이 있는지 먼저 찾아보고, 그림으로 분석해본 후에 코드를 작성해야겠다. 바로 코드 작성하려니까 계속 꼬였던 것 같다. -
변수명을 냅다 i, j, k 이렇게 설정했을때는 복잡했는데 바꾸니까 용도가 어떤 의도인지 훨씬 보기 편한 것 같다.
Reference
Author And Source
이 문제에 관하여([알고리즘/백준] 2439번 :: 별 찍기 - 2 (C++)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@miiingirok/알고리즘백준-2439번-별-찍기-2-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)