-
JUNGOL 실력키우기 도형만들기1 - 문자삼각형1 | 문자삼각형2보관함 2020. 1. 19. 09:42
기초 다지기에서 배운 내용을 응용하여 문제를 해결해야 하는 실력 키우기입니다.
실력 키우기는 비슷한 문제 유형별로 묶어서 풀어보겠습니다.
이번 포스팅에서는 도형만들기1의 문자삼각형 시리즈를 풀어보겠습니다.
1338 : 문자삼각형1
이번 문제는 우측으로 붙어있는 삼각형을 만드는 문제입니다. 그런데 이런 문제는 사실 왼쪽에 붙어있다고 가정하고 모양을 만든 뒤 우측 정렬이 되도록 공백을 맞춰주는 게 훨씬 쉬울 수 있습니다.
즉, 다음과 같은 모양을 만든 뒤 공백을 만들어주는 것이죠.
#include <iostream> using namespace std; int main(void) { int n; cin >> n; char arr[101][101]{}; char c = 'A'; for (int i = 0; i < n; ++i) { for (int j = 0; j < n - i; ++j) { arr[j + i][j] = c++; if (c > 'Z') c = 'A'; } } for (int i = 0; i < n; ++i) { for (int j = 0; j < n - 1 - i; ++j) { cout << " "; } for (int j = i; j >= 0; --j) { cout << arr[i][j] << ' '; } cout << endl; } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2074&sca=20
1339 : 문자삼각형2
이번 문제도 특이하게 결과가 제대로 안 나오고 있습니다.
제가 실행한 결과는 다음과 같습니다.
현재 이 부분에 대해 문의를 한 상태이며 결과가 나오면 반영하도록 하겠습니다.
#include <iostream> using namespace std; int main(void) { int n; cin >> n; char arr[101][101]{}; char c = 'A'; for (int i = 0; i <= n / 2; ++i) { for (int j = n / 2 - i; j <= n / 2 + i; ++j) { arr[j][n / 2 - i] = c++; if (c > 'Z') c = 'A'; } } for (int i = 0; i < n; ++i) { for (int j = 0; j <= n / 2; ++j) { cout << arr[i][j] << ' '; } cout << endl; } }
해당 문제에 대한 답변을 받았으며 내용은 다음과 같았습니다.
위 답변대로 수정하고 입력 범위에 대한 제한을 추가했더니 성공했습니다. 아마 null 문자가 아닌 공백으로 표시를 해야 정답 처리가 되는 것 같습니다.
#include <iostream> using namespace std; int main(void) { int n; cin >> n; if (n < 1 || n > 100 || n % 2 == 0) { cout << "INPUT ERROR" << endl; return 0; } char arr[101][101]{}; char c = 'A'; for (int i = 0; i <= n / 2; ++i) { for (int j = n / 2 - i; j <= n / 2 + i; ++j) { arr[j][n / 2 - i] = c++; if (c > 'Z') c = 'A'; } } for (int i = 0; i < n; ++i) { for (int j = 0; j <= n / 2; ++j) { if (arr[i][j] == 0) cout << ' '; else cout << arr[i][j] << ' '; } cout << endl; } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2075&sca=20