-
JUNGOL 실력키우기 도형만들기1 - 숫자사각형1 | 숫자사각형2 | 숫자사각형3 | 숫자사각형4보관함 2020. 1. 17. 20:14
기초 다지기에서 배운 내용을 응용하여 문제를 해결해야 하는 실력 키우기입니다.
실력 키우기는 비슷한 문제 유형별로 묶어서 풀어보겠습니다.
이번 포스팅에서는 도형만들기1의 숫자사각형 시리즈를 풀어보겠습니다.
1303 : 숫자사각형1
기초다지기의 반복문에 나왔던 문제 유형 중 하나였습니다. 단순하게 반복문을 중첩하면 쉽게 해결이 가능합니다.
#include <iostream> using namespace std; int main(void) { int n, m; cin >> n >> m; for (int i = 0, num = 1; i < n; ++i) { for(int j=0; j<m; ++j, ++num) { cout << num << ' '; } cout << endl; } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2069&sca=20
1856 : 숫자사각형2
이 문제에서 주목해야 할 점은 다음과 같습니다.
1. 숫자는 홀수 번째 줄에서 증가하고 짝수 번째 줄에서 감소한다.
2. 이전 줄 마지막 숫자 다음에 출력되는 것은 다음줄 첫 번째 숫자이다. 다음줄 마지막 숫자가 아니다.
다시 쓰자면 첫 번째 줄에서 5까지 출력한 다음에 num은 5가 저장되어 있는 게 아니라 6이 저장되어 있고
두 번째 줄에서 6까지 출력한 다음 num에는 5가 저장되어 있다는 것을 주의하시면 적절하게 해결이 가능합니다.
#include <iostream> using namespace std; int main(void) { int n, m; cin >> n >> m; for (int i = 0, num = 1; i < n; ++i) { // 1번 째 줄은 순서대로 출력한다. if (i != 0) { // 홀수 번째 줄(i % 2 == 0 인 경우)의 첫번째 값은 // 이전 출력한 숫자에 m + 1을 해야한다. // 짝수 번째 줄의 첫번째 값은 // 이전 출력한 숫자에 m - 1을 해야한다. num += m + 1 - 2 * (i % 2); } if (i % 2 == 0) { for (int j = 0; j < m; ++j, ++num) { cout << num << ' '; } } else { for (int j = m - 1; j >= 0; --j, --num) { cout << num << ' '; } } cout << endl; } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1129&sca=20
1304 : 숫자사각형3
이 문제는 결국 한 줄에 출력되는 숫자의 간격이 n과 같고 각 줄의 첫 번째 값이 1씩 증가한다는 점을 주의하시면 쉽게 해결이 가능합니다.
#include <iostream> using namespace std; int main(void) { int n; cin >> n; for (int i = 0; i < n; ++i) { int num = i + 1; for (int j = 0; j < n; ++j, num += n) { cout << num << ' '; } cout << endl; } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2070&sca=20
2046 : 숫자사각형4
이 문제는 기존에 풀이했던 문제 세가지를 약간씩 변형하여 출제한 문제입니다.
특이점은 세 가지중 한 가지를 선택하여 출력하도록 한 것인데, switch문을 사용하면 간단하게 해결이 가능합니다.
#include <iostream> using namespace std; void PrintSquare1(int n); void PrintSquare2(int n); void PrintSquare3(int n); int main(void) { int n, m; cin >> n >> m; switch (m) { case 1: PrintSquare1(n); break; case 2: PrintSquare2(n); break; case 3: PrintSquare3(n); break; } } void PrintSquare1(int n) { for (int i = 0, num = i + 1; i < n; ++i, ++num) { for (int j = 0; j < n; ++j) { cout << num << ' '; } cout << endl; } } void PrintSquare2(int n) { for (int i = 0; i < n; ++i) { if (i % 2 == 0) { for (int num = 1; num <= n; ++num) { cout << num << ' '; } } else { for (int num = n; num > 0; --num) { cout << num << ' '; } } cout << endl; } } void PrintSquare3(int n) { for (int i = 0, adder = i + 1; i < n; ++i, ++adder) { for (int j = 0, num = adder; j < n; ++j, num += adder) { cout << num << ' '; } cout << endl; } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1316&sca=20