-
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
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
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