-
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
JUNGOL | 숫자사각형1 > 문제은행
사각형의 높이n와 너비m( n과 m의 범위는 100 이하의 정수)이 주어진다. 위에서 형태의 직사각형을 입력에서 들어온 높이 n과 너비 m에 맞춰서 출력한다. 숫자 사이는 공백으로 구분한다. <알아두기> 반복문을 이용한 출력 일반적으로 일정한 수들의 집합을 행렬과 같은 사각형 형태로 출력하려면 반복문을 이용해서 간단하게 처리할 수 있다. <코드> for (i =0; i < n; i++) { for (j = 0; j < m; j++) {
www.jungol.co.kr
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
JUNGOL | 숫자사각형2 > 문제은행
제한시간 1000 ms 메모리제한 256 MB 해결횟수 4592 회 시도횟수 9686 회 문제 사각형의 높이 n과 너비 m을 입력받은 후 사각형 내부에 지그재그 형태로 1부터 n*m번까지 숫자가 차례대로 출력되는 프로그램을 작성하시오. < 처리조건 > 숫자의 진행 순서는 처음에 왼쪽에서 오른쪽으로 너비 m만큼 진행 한 후 방향을 바꾸어서 이를 반복한다. 입력형식 사각형의 높이n와 너비m( n과 m의 범위는 100 이하의 정수)을 입력
www.jungol.co.kr
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
JUNGOL | 숫자사각형3 > 문제은행
정사각형의 한 변의 길이 n을 입력받은 후 다음과 같이 숫자로 된 정사각형 형태로 출력하는 프로그램을 작성하시오. < 처리조건 > 숫자의 진행 순서는 처음에 왼쪽 위에서 아래쪽으로 n만큼 진행 한 후 바로 오른쪽 위에서 다시 아래쪽으로 진행하는 방법으로 정사각형이 될 때까지 반복한다. <생각하기> 열을 우선으로 하여 바깥 for문을 작성하고, 열이 결정되면 행을 나타내는 for문을 작성해서 채워나가면 된다. for (i = 0; i < n; i++)
www.jungol.co.kr
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
JUNGOL | 숫자사각형4 > 문제은행
정사각형의 한 변의 길이 n과 종류 m을 입력받은 후 다음과 같은 정사각형 형태로 출력하는 프로그램을 작성하시오. < 처리조건 > 종류 2번의 경우 숫자의 진행 순서는 처음에 왼쪽에서 오른쪽으로 너비 n만큼 진행 한 후 방향을 바꾸어서 이를 반복한다. 정사각형 한 변의 길이 n(n의 범위는 100 이하의 정수)과 종류 m(m은 1부터 3사이의 정수)을 입력받는다. 위에서 언급한 3가지 종류를 입력에서 한 변의 길이 n과 종류 m에 맞춰서 출력한다. 숫자
www.jungol.co.kr