-
JUNGOL 실력키우기 도형만들기2 - 숫자삼각형 | 파스칼 삼각형보관함 2020. 1. 24. 10:39
기초 다지기에서 배운 내용을 응용하여 문제를 해결해야 하는 실력 키우기입니다.
실력 키우기는 비슷한 문제 유형별로 묶어서 풀어보겠습니다.
이번 포스팅에서는 도형만들기2의 숫자 삼각형과 응용판인 파스칼 삼각형을 풀어보겠습니다.
1641 : 숫자삼각형
#include <iostream> using namespace std; void PrintTriangle1(int n); void PrintTriangle2(int n); void PrintTriangle3(int n); bool CheckInputRange(int n); void PrintError(); int main(void) { int n, m; cin >> n >> m; if (!CheckInputRange(n)) PrintError(); else { switch (m) { case 1: PrintTriangle1(n); break; case 2: PrintTriangle2(n); break; case 3: PrintTriangle3(n); break; default: PrintError(); break; } } } void PrintTriangle1(int n) { int num = 1; for (int i = 1; i <= n; ++i) { if (i % 2 == 1) { for (int j = 1; j <= i; ++j) { cout << num++ << ' '; } num += i; } else { for (int j = 1; j <= i; ++j) { cout << num-- << ' '; } num += i + 1; } cout << endl; } } void PrintTriangle2(int n) { for (int i = 0; i < n; ++i) { for (int j = 0; j < i; ++j) { cout << " "; } for (int j = 0; j < 2 * n - 2 * i - 1; ++j) { cout << i << ' '; } cout << endl; } } void PrintTriangle3(int n) { for (int i = 1; i <= n / 2 + 1; ++i) { for (int j = 1; j <= i; ++j) { cout << j << ' '; } cout << endl; } for (int i = n / 2; i >= 1; --i) { for (int j = 1; j <= i; ++j) { cout << j << ' '; } cout << endl; } } bool CheckInputRange(int n) { if (n < 1) return false; if (n > 100) return false; if (n % 2 == 0) return false; return true; } void PrintError() { cout << "INPUT ERROR!" << endl; }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=914&sca=2020
2071 : 파스칼 삼각형
기본적으로 파스칼의 삼각형을 적용한 것 외에는 다른 삼각형 만들기 문제와 크게 다르지 않습니다.
파스칼의 삼각형은 쉽게 말하자면 첫 번째 숫자가 1일 때 다음에 나오는 숫자는 해당 열의 바로 위의 숫자와 위의 왼쪽 숫자를 합한 값이 나오며 각 열에 포함되는 숫자는 1개씩 증가하게 되는 것 입니다.
이것만 유의하면 문제를 쉽게 해결할 수 있습니다.
저는 파스칼 삼각형을 출력에 따라 만드는 것이 아니라 미리 (0, 0)에서 시작되는 파스칼 삼각형을 만든 뒤 이 것을 원하는 모양에 따라 출력하도록 했습니다.
#include <iostream> using namespace std; void CreatePascalTriangle(); void PrintTriangle1(int n); void PrintTriangle2(int n); void PrintTriangle3(int n); int arr[31][31]{}; int main(void) { int n, m; cin >> n >> m; CreatePascalTriangle(); switch (m) { case 1: PrintTriangle1(n); break; case 2: PrintTriangle2(n); break; case 3: PrintTriangle3(n); break; } } void CreatePascalTriangle() { arr[0][0] = 1; for (int i = 1; i < 30; ++i) { for (int j = 0; j <= i; ++j) { if (j > 0) { arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]; } else { arr[i][j] = arr[i - 1][j]; } } } } void PrintTriangle1(int n) { for (int i = 0; i < n; ++i) { for (int j = 0; j <= i; ++j) { cout << arr[i][j] << ' '; } cout << endl; } } void PrintTriangle2(int n) { for (int i = n - 1; i >= 0; --i) { for (int j = 1; j < n - i; ++j) { cout << ' '; } for (int j = 0; j <= i; ++j) { cout << arr[i][j] << ' '; } cout << endl; } } void PrintTriangle3(int n) { for (int i = n - 1; i >= 0; --i) { for (int j = n - 1; j >= i; --j) { cout << arr[j][i] << ' '; } cout << endl; } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1335&sca=2020