ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JUNGOL...40
    일지 2021. 1. 13. 11:54

    Beginner_Coder/도형만들기1/숫자사각형1


    문제                                            

    사각형의 높이 n과 너비 m을 입력받은 후

    n행 m열의 사각형 형태로 1부터 n*m번까지 숫자가 차례대로 출력되는 프로그램을 작성하시오.

     

    < 처리조건 > 

    숫자의 진행 순서는 처음에 맨 윗줄의 왼쪽에서 오른쪽으로 1부터 차례대로 너비 m만큼 출력한 후 

    다음 줄로 바꾸어서 다시 왼쪽에서 오른쪽으로 1씩 증가하면서 출력하는 방법으로 n번 줄까지 반복한다.

     

    입력 형식                                     

    사각형의 높이n와 너비m( n과 m의 범위는 100 이하의 정수)이 주어진다.

     

    출력 형식                                     

    위에서 형태의 직사각형을 입력에서 들어온 높이 n과 너비 m에 맞춰서 출력한다. 숫자 사이는 공백으로 구분한다.

     

    입력 예                                        

    4 5

     

    출력 예                                        

    1 2 3 4 5 
    6 7 8 9 10
    11 12 13 14 15 
    16 17 18 19 20

     

    Hint!

    <알아두기>

    반복문을 이용한 출력 일반적으로 일정한 수들의 집합을 행렬과 같은 사각형 형태로 출력하려면 반복문을 이용해서 간단하게 처리할 수 있다. 

     

    <코드>

    for (i =0; i < n; i++) {
        for (j = 0; j < m; j++) {
            printf("%d ", num++);
        }
        printf(" ");
    }

     

    <코드분석> 

    01 : 바깥에 있는 i가 행(줄)을 나타내며 

    02 : 행이 결정이 되면 각 행마다 m열(칸)만큼 반복하여 

    03 : 숫자를 출력하고 

    05 : 줄을 바꾸는 작업을 n번 반복한다. 

    이렇게 간단한 숫자들로 이루어진 사각형은 이중 for문을 이용해서 간단하게 출력할 수 있다.


    NumberSquare1.h

    #include <iostream>

     

    NumberSquare1.cpp

    void NumberSquare1::Code()
    {
    	int n, m;
    
    	std::cin >> n >> m;
    
    	for (int i = 0, num = 1; i < n; i++)
    	{
    		for (int j = 0; j < m; j++)
    		{
    			std::cout << num++ << ' ';
    		}
    		std::cout << '\n';
    	}
    }

     

    Beginner_Coder/도형만들기1/숫자사각형2


    문제                                            

    사각형의 높이 n과 너비 m을 입력받은 후

    사각형 내부에 지그재그 형태로 1부터 n*m번까지 숫자가 차례대로 출력되는 프로그램을 작성하시오. 

     

    < 처리조건 > 

    숫자의 진행 순서는 처음에 왼쪽에서 오른쪽으로 너비 m만큼 진행 한 후 방향을 바꾸어서 이를 반복한다. 

     

    입력 형식                                     

    사각형의 높이n와 너비m( n과 m의 범위는 100 이하의 정수)을 입력받는다.

     

    출력 형식                                     

    위에서 형태의 직사각형을 입력에서 들어온 높이 n과 너비 m에 맞춰서 출력한다. 숫자 사이는 공백으로 구분한다.

     

    입력 예                                        

    4 5

     

    출력 예                                        

    1 2 3 4 5 
    10 9 8 7 6 
    11 12 13 14 15 
    20 19 18 17 16

     

    Hint!

    <알아두기>

    배열을 이용한 출력 수들의 형태가 순서대로 되어 있다면 앞에서처럼 이중 for문으로 간단하게 출력할 수 있지만 그 순서가 변형이 되면 프로그램이 매우 복잡해 질 수 있다. 

    왜냐하면 일반적으로 출력을 할 때에는 위에서 아래로, 그리고 앞에서 뒤로 순서대로 해야 하기 때문이다. 

    반면에 배열에는 값을 저장하는데 순서대로 채울 필요가 없기 때문에 규칙에 따라 해당 위치에 수들을 배치해 놓고 순서대로 출력을 하면 간단하게 문제를 해결할 수 있다. 

     

    <코드>

    void fill() 
    {
        int i, j;
        int num = 1;
        for (i = 0; i < n; i++) { // n행만큼 반복
            if (i % 2 == 0) { // 짝수행이면
                for (j = 0; j < m; j++) { // 앞에서부터 m열만큼 반복
                    arr[i][j] = num++; // 배열에 수를 넣고 1증가시킨다.
                }
            } else { // 짝수행이 아니면(홀수행이면)
                for (j = m-1; j >= 0; j--) { // 뒤에서 부터 첫 번째 열까지 반복
                    arr[i][j] = num++; // 배열에 수를 넣고 1증가시킨다.
                }
            }
        }
    }

     

    <코드분석> 

    01 : fill()은 주어진 규칙에 따라 배열에 수를 채우는 함수이다. 

    06~10 : 짝수행일 경우에는 앞에서부터 차례대로 배열을 채워나가고, 11~15 : 홀수행일 경우에는 뒤에서부터 채워나간다. 

     

    ※ 만약 직접 출력하려면 뒤에서부터 출력할 수 없기 때문에 각 행마다 맨 앞에 들어갈 수를 구해서 1씩 늘이거나 줄여가면서 처리해야 하므로 매우 복잡해진다.


    NumberSquare2.h

    #include <iostream>

     

    NumberSquare2.cpp

    void NumberSquare2::Code()
    {
    	int n, m;
    
    	std::cin >> n >> m;
    
    	for (int i = 0, num = 1; i < n; i++)
    	{
    		if (i % 2 == 0)
    		{
    			if (i != 0)
    			{
    				num = num + 1 + m;
    			}
    			
    			for (int j = 0; j < m; j++)
    			{
    				std::cout << num++ << ' ';
    			}
    		}
    		else
    		{
    			num = num - 1 + m;
    			for (int j = 0; j < m; j++)
    			{
    				std::cout << num-- << ' ';
    			}
    		}
    		std::cout << '\n';
    	}
    }

     

    Beginner_Coder/도형만들기1/숫자사각형3


    문제                                            

    정사각형의 한 변의 길이 n을 입력 받은 후 다음과 같이 숫자로 된 정사각형 형태로 출력하는 프로그램을 작성하시오. 

     

    < 처리조건 > 

    숫자의 진행 순서는 처음에 왼쪽 위에서 아래쪽으로 n만큼 진행 한 후 

    바로 오른쪽 위에서 다시 아래쪽으로 진행하는 방법으로 정사각형이 될 때까지 반복한다.

     

    입력 형식                                     

    정사각형 한 변의 길이 n(n의 범위는 100 이하의 자연수)을 입력받는다.

     

    출력 형식                                     

    위의 형식과 같이 한 변의 길이가 n인 숫자 사각형을 출력한다. 숫자 사이는 공백으로 구분하여 출력한다.

     

    입력 예                                        

    4

     

    출력 예                                        

    1 5 9 13
    2 6 10 14
    3 7 11 15
    4 8 12 16

     

    Hint!

    <생각하기>

    열을 우선으로 하여 바깥 for문을 작성하고, 열이 결정되면 행을 나타내는 for문을 작성해서 채워나가면 된다. 

     

    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            arr[j][i] = num++;
        }
    }

    NumberSquare3.h

    #include <iostream>

     

    NumberSquare3.cpp

    void NumberSquare3::Code()
    {
    	int n;
    
    	std::cin >> n;
    
    	for (int i = 1; i <= n; i++)
    	{
    		for (int j = 0; j < n; j++)
    		{
    			std::cout << i + j * n << ' ';
    		}
    		std::cout << '\n';
    	}
    }

     

    Beginner_Coder/도형만들기1/숫자사각형4


    문제                                            

    정사각형의 한 변의 길이 n과 종류 m을 입력받은 후 다음과 같은 정사각형 형태로 출력하는 프로그램을 작성하시오.

     

    < 처리조건 >

    종류 2번의 경우 숫자의 진행 순서는 처음에 왼쪽에서 오른쪽으로 너비 n만큼 진행 한 후 방향을 바꾸어서 이를 반복한다.

     

    1  1  1  1  1
    2  2  2  2  2
    3  3  3  3  3
    4  4  4  4  4
    5  5  5  5  5
    1  2  3  4  5
    5  4  3  2  1
    1  2  3  4  5
    5  4  3  2  1
    1  2  3  4  5
    1   2   3   4   5
    2   4   6   8  10
    3   6   9  12  15
    4   8  12  16  20
    5  10  15  20  25
    종류1 종류2 종류3

     

    입력 형식                                     

    정사각형 한 변의 길이 n(n의 범위는 100 이하의 정수)과 종류 m(m은 1부터 3사이의 정수)을 입력받는다.

     

    출력 형식                                     

    위에서 언급한 3가지 종류를 입력에서 한 변의 길이 n과 종류 m에 맞춰서 출력한다. 숫자 사이는 공백으로 구분하여 출력한다.

     

    입력 예                                        

    3 2                         | 4 3

     

    출력 예                                        

    1 2 3                      | 1 2 3 4
    3 2 1                      | 2 4 6 8
    1 2 3                      | 3 6 9 12

                                 | 4 8 12 16


    NumberSquare4.h

    #include <iostream>

     

    NumberSquare4.cpp

    void NumberSquare4::Code()
    {
    	int n, m;
    
    	std::cin >> n >> m;
    
    	if (m == 1)
    	{
    		for (int i = 1; i <= n; i++)
    		{
    			for (int j = 0; j < n; j++)
    			{
    				std::cout << i << ' ';
    			}
    			std::cout << '\n';
    		}
    	}
    	else if (m == 2)
    	{
    		for (int i = 0; i < n; i++)
    		{
    			if (i % 2 == 0)
    			{
    				for (int j = 1; j <= n; j++)
    				{
    					std::cout << j << ' ';
    				}
    			}
    			else
    			{
    				for (int j = n; j >= 1; j--)
    				{
    					std::cout << j << ' ';
    				}
    			}
    			std::cout << '\n';
    		}
    	}
    	else
    	{
    		for (int i = 1; i <= n; i++)
    		{
    			for (int j = 1; j <= n; j++)
    			{
    				std::cout << i * j << ' ';
    			}
    			std::cout << '\n';
    		}
    	}
    }

     

    NadanKim/CodingTest_JUNGOL: JUNGOL 코딩 테스트를 위한 저장소 (github.com)

     

    NadanKim/CodingTest_JUNGOL

    JUNGOL 코딩 테스트를 위한 저장소. Contribute to NadanKim/CodingTest_JUNGOL development by creating an account on GitHub.

    github.com

     

    댓글

Designed by Tistory.