-
JUNGOL 실력키우기 도형만들기2 - 별삼각형1 | 별삼각형2 | 별삼각형3보관함 2020. 1. 22. 21:14
기초 다지기에서 배운 내용을 응용하여 문제를 해결해야 하는 실력 키우기입니다.
실력 키우기는 비슷한 문제 유형별로 묶어서 풀어보겠습니다.
이번 포스팅에서는 도형만들기2의 별삼각형 시리즈를 풀어보겠습니다.
1523 : 별삼각형1
이 문제도 이전에 풀었던 문제와 크게 다르지 않습니다.
케이스 1과 2는 쉽게 해결이 가능합니다. 케이스 3은 2n - 1을 따라 진행하시면 됩니다.
주의해야 할 점은 범위를 벗어나는 값에 대한 처리를 명시해 뒀기 때문에 반드시 이 부분에 대한 처리를 추가해야 합니다.
#include <iostream> using namespace std; bool CheckValidData(int n, int m); void PrintTriangle1(int n); void PrintTriangle2(int n); void PrintTriangle3(int n); int main(void) { int n, m; cin >> n >> m; if (CheckValidData(n, m)) { switch (m) { case 1: PrintTriangle1(n); break; case 2: PrintTriangle2(n); break; case 3: PrintTriangle3(n); break; } } else { cout << "INPUT ERROR!" << endl; } } bool CheckValidData(int n, int m) { if (n < 1) return false; if (n > 100) return false; if (m < 1) return false; if (m > 3) return false; return true; } void PrintTriangle1(int n) { for (int i = 1; i <= n; ++i) { for (int j = 0; j < i; ++j) { cout << '*'; } cout << endl; } } void PrintTriangle2(int n) { for (int i = n; i > 0; --i) { for (int j = 0; j < i; ++j) { cout << '*'; } cout << endl; } } void PrintTriangle3(int n) { for (int i = 1; i <= n; ++i) { for (int j = 0; j < n - i; ++j) { cout << ' '; } for (int j = 0; j < i * 2 - 1; ++j) { cout << '*'; } cout << endl; } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=795&sca=2020
JUNGOL | 별삼각형1 > 문제은행
삼각형의 높이 n과 종류 m을 입력받은 후 다음과 같은 삼각형 형태로 출력하는 프로그램을 작성하시오. 삼각형의 크기 n(n의 범위는 100 이하의 자연수)과 종류 m(m은 1부터 3사이의 자연수)을 입력받는다. 위에서 언급한 3가지 종류를 입력에서 들어온 높이 n과 종류 m에 맞춰서 출력한다. 입력된 데이터가 주어진 범위를 벗어나면 "INPUT ERROR!"을 출력한다.
www.jungol.co.kr
1719 : 별삼각형2
도형이 조금 더 복잡해 보이지만 이 경우에는 위의 삼각형과 아래 삼각형을 분리해 생각하면 어렵지 않게 해결할 수 있습니다. 또, 범위를 체크하는 것도 잊지 마세요!
#include <iostream> using namespace std; bool CheckValidData(int n, int m); void PrintTriangle1(int n); void PrintTriangle2(int n); void PrintTriangle3(int n); void PrintTriangle4(int n); int main(void) { int n, m; cin >> n >> m; if (CheckValidData(n, m)) { switch (m) { case 1: PrintTriangle1(n); break; case 2: PrintTriangle2(n); break; case 3: PrintTriangle3(n); break; case 4: PrintTriangle4(n); break; } } else { cout << "INPUT ERROR!" << endl; } } bool CheckValidData(int n, int m) { if (n < 1) return false; if (n > 100) return false; if (n % 2 == 0) return false; if (m < 1) return false; if (m > 4) return false; return true; } void PrintTriangle1(int n) { for (int i = 1; i <= n / 2 + 1; ++i) { for (int j = 0; j < i; ++j) { cout << '*'; } cout << endl; } for (int i = n / 2; i > 0; --i) { for (int j = 0; j < i; ++j) { cout << '*'; } cout << endl; } } void PrintTriangle2(int n) { for (int i = 1; i <= n / 2 + 1; ++i) { for (int j = 0; j < n / 2 + 1 - i; ++j) { cout << ' '; } for (int j = 0; j < i; ++j) { cout << '*'; } cout << endl; } for (int i = n / 2; i > 0; --i) { for (int j = i; j < n / 2 + 1; ++j) { cout << ' '; } for (int j = 0; j < i; ++j) { cout << '*'; } cout << endl; } } void PrintTriangle3(int n) { for (int i = n; i >= 1; i -= 2) { for (int j = i; j < n; j += 2) { cout << ' '; } for (int j = 0; j < i; ++j) { cout << '*'; } cout << endl; } for (int i = 3; i <= n; i += 2) { for (int j = i; j < n; j += 2) { cout << ' '; } for (int j = 0; j < i; ++j) { cout << '*'; } cout << endl; } } void PrintTriangle4(int n) { for (int i = n / 2 + 1; i >= 1; --i) { for (int j = i; j < n / 2 + 1; ++j) { cout << ' '; } for (int j = 0; j < i; ++j) { cout << '*'; } cout << endl; } for (int i = 2; i <= n / 2 + 1; ++i) { for (int j = 0; j < n / 2; ++j) { cout << ' '; } for (int j = 0; j < i; ++j) { cout << '*'; } cout << endl; } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=992&sca=2020
JUNGOL | 별삼각형2 > 문제은행
삼각형의 높이 n과 종류 m을 입력받은 후 다음과 같은 삼각형 형태로 출력하는 프로그램을 작성하시오. 다음은 n이 5인 경우의 예시이다. 삼각형의 크기 n(n의 범위는 100 이하의 홀수)과 종류 m(m은 1부터 4사이의 정수)을 입력받는다. 위에서 언급된 4가지 종류를 입력에서 들어온 높이 n과 종류 m에 맞춰서 출력한다. 입력된 데이터가 주어진 범위를 벗어나면 "INPUT ERROR!"을 출력한다. '*'과 '*' 사이에는 공백이 없다.
www.jungol.co.kr
1329 : 별삼각형3
이 문제도 2 * n - 1을 생각하면 어렵지 않게 해결이 가능합니다.
#include <iostream> using namespace std; bool CheckValidData(int n); void PrintTriangle(int n); int main(void) { int n; cin >> n; if (CheckValidData(n)) { PrintTriangle(n); } else { cout << "INPUT ERROR!" << endl; } } bool CheckValidData(int n) { if (n < 1) return false; if (n > 100) return false; if (n % 2 == 0) return false; return true; } void PrintTriangle(int n) { for (int i = 1; i <= n / 2 + 1; ++i) { for (int j = 1; j < i; ++j) { cout << ' '; } for (int j = 0; j < i * 2 - 1; ++j) { cout << '*'; } cout << endl; } for (int i = n / 2; i >= 1; --i) { for (int j = 1; j < i; ++j) { cout << ' '; } for (int j = 0; j < i * 2 - 1; ++j) { cout << '*'; } cout << endl; } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=608&sca=2020
JUNGOL | 별삼각형3 > 문제은행
삼각형의 높이 N을 입력받아 아래와 같은 모양을 출력하는 프로그램을 작성하시오. 삼각형의 높이 N(N의 범위는 100 이하의 양의 홀수)을 입력받는다. N의 높이에 맞추어 주어진 형태의 모양을 출력한다. 입력된 데이터가 주어진 범위를 벗어나면 "INPUT ERROR!"를 출력한다.
www.jungol.co.kr