JUNGOL 실력키우기 도형만들기1 - 숫자사각형1 | 숫자사각형2 | 숫자사각형3 | 숫자사각형4
기초 다지기에서 배운 내용을 응용하여 문제를 해결해야 하는 실력 키우기입니다.
실력 키우기는 비슷한 문제 유형별로 묶어서 풀어보겠습니다.
이번 포스팅에서는 도형만들기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