[BAEKJOON - C++] 2442번 : 별 찍기 - 5

정다은·2023년 7월 2일
0

BAEKJOON

목록 보기
19/54
C++ 배우기 (51~100) 이 문제집을 참고하여 문제를 풀었습니다.

2023년 1월 ~ 2월에 프로그래밍을 공부하기 위해 풀었던 문제들이다.

🍑문제

첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제
별은 가운데를 기준으로 대칭이어야 한다.

입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

🍑대략적인 틀

  • 몇번째 줄까지 출력할지 입력받는다
  • 첫번째 for문으로 줄을 바꾸어준다
  • 두번째 for문은 빈칸을 찍는데 이것은 그냥 평소에 찍듯이 1개씩 줄어들면 된다
  • 세번째 for문을 어떻게 홀수개만큼 증가 시킬지가 문제인데… 2n-1개씩 찍히면 되겠다
    그치만 이건 조금 식 세우기가 막막해서 num - 2n씩 빠지게
    • 이거짜다가 한시간 넘게 지났다..ㅜ for문은 한줄을 찍고 겉의 for문이 담주로 넘겨주는건데 여러줄을 찍으려 했다…
    • 일단 첫째줄에는 1개 둘째 줄에는 3개 이런식으로 줄을 기준으로 넘어가므로 둘중 하나를 고정시키고 하나를 변화시키며 찍어야 하며 i와 관련 시켜 식을 세워야 한다.

🍑오류 해결

코드를 짜다보니 내가 생각보다 for문을 중첩 시켰을 때 원리를 완벽하게 이해한건 아니라는 생각이 들었다.

내가 이문제를 풀기 어려워 했던 가장 큰 이유는 ‘ 머리가 꼬여서 ‘이다. 생각보다 간단한 문제인데 나는 줄을 바꾸는 for문과 출력하는 for문의 역할을 뒤섞어서 생각했고, 그냥 별 출력 for문을 2i-1번 반복하게 만들면 된다고 생각은 하면서 부등호의 방향 그리고 k++ or k-- 가 혼동되어 정말 큰 혼란을 맞았다. 간단히 부등호를 줄에 맞게 변환시켜 개수를 정하고, k의 수를 정해서 늘리며 조건을 만족하는 동안 출력되도록 하는것인데 그 역할을 망각하고 둘다 개수를 정하는 애들이라고 생각하여 이상하게 코드를 짰었다.

또한 줄마다 개수가 다른경우 몇번째 줄인지와 연관지어 for문의 조건을 설정해야하는데 그러지 못했다는 것?
어쨌든 다양한 고민을 하며 많은 성장을 이룬것 같다.

🍑 작성한 코드

// 별 찍기 - 5

#include <iostream>
using namespace std;

int main() {
	int num;
	cin >> num;

	for (int i = 1; i <= num; i++) {
		for (int j = num - i; j > 0; j--) {
			cout << " ";
		}
		for (int k = 1; k < 2*i; k++) {
			cout << "*";
		}
		cout << '\n';
	}
}
profile
보안 공부하는 대학교 3학년 / 시리즈에서 더욱 편하게 글을 찾아보실 수 있습니다:)

0개의 댓글