-
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
JUNGOL | 숫자삼각형 > 문제은행
삼각형의 높이 n과 종류 m을 입력받은 후 다음과 같은 삼각형 형태로 출력하는 프로그램을 작성하시오. < 처리조건 > 종류 1번의 숫자의 진행 순서는 처음에 왼쪽에서 오른쪽으로 진행 한 후 방향을 바꾸어서 이를 반복한다. 삼각형의 크기 n(n의 범위는 100 이하의 홀수)과 종류 m(m은 1부터 3사이의 정수)을 입력받는다. 위에서 언급한 3가지 종류를 입력에서 들어온 높이 n과 종류 m에 맞춰서 출력한다. 숫자사이는 공백으로 구분한다. 입력된 데이터가
www.jungol.co.kr
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
JUNGOL | 파스칼 삼각형 > 문제은행
삼각형의 높이n(1부터 30사이의 정수)과 종류m(1부터 3사이의 정수)을 입력받는다. 위에서 제시한 형태의 파스칼 삼각형을 입력에서 들어온 높이 n과 종류 m에 맞춰서 출력한다. 숫자는 한칸의 공백으로 구분하여 출력한다. <생각하기>> 종류 1과 같이 배열에 저장을 한 후 m의 값에 따라 출력을 바꾸면 된다. 종류 2의 경우는 배열의 아래쪽부터 출력을 하면 된다. 종류 3의 경우는 각 위치에 출력되는 배열의 번호를 적어놓고 생각해 보자.
www.jungol.co.kr