보관함

JUNGOL 실력키우기 도형만들기1 - 숫자사각형1 | 숫자사각형2 | 숫자사각형3 | 숫자사각형4

niamdank 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