ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JUNGOL...42
    일지 2021. 1. 26. 12:26

    Beginner_Coder/도형만들기1/문자삼각형1


    문제                                            

    삼각형의 높이 N을 입력받아서 아래와 같이 문자 'A'부터 차례대로 왼쪽 대각선으로 채워서 삼각형 모양을 출력하는 프로그램을 작성하시오.

     

    < 처리조건 > 

    (1) 오른쪽 위부터 왼쪽 아래쪽으로 이동하면서 문자 'A'부터 차례대로 채워나간다.

    (2) N번 행까지 채워지면 다시 오른쪽 둘째 행부터 왼쪽 아래로 채워나간다. 

    (3) 삼각형이 모두 채워질 때까지 반복하면서 채워 나간다. (문자 'Z'다음에는 'A'부터 다시 시작한다.)

     

    입력 형식                                     

    삼각형의 높이 N(N의 범위는 100 이하의 양의 정수)을 입력받는다.

     

    출력 형식                                     

    주어진 형태대로 높이가 N인 문자삼각형을 출력한다. 문자 사이는 한 개의 공백으로 구분한다.

     

    입력 예                                        

    5

     

    출력 예                                        

            A
          B F
        C G J
      D H K M
    E I L N O

     

    Hint!

    <생각하기>

    배열에 채우는 순서를 먼저 생각해보자. 

    (1, 5) (2, 4) (3, 3) (4, 2) (5, 1) (2, 5) (3, 4) (4, 3) (5, 2) (3, 5) (4, 4) (5, 3) (4, 5) (5, 4) (5, 5) 

    i를 어떻게 정하는게 좋을지 여러 가지 방법이 있으므로 각자 생각해 보자. 

     

    아래의 소스는 i를 시작하는 행의 위치로 정하고 작성한 것이다. 

    배열은 널값(‘\0’, 0)으로 초기화 하고 출력할 때 널값인 경우 공백을 출력하면 된다. 

     

    <코드> 

    for (i = 1; i <= n; i++) {
        for (j = i, k = n; j <= n; j++, k--) {
            arr[j][k] = alpha++;
            if(alpha > 'Z')
                alpha = 'A';
        }
    }

     

    <코드분석> 

    01 : i는 처음 시작하는 행의 위치를 나타낸다. 

    02 ; j는 행의 위치로 i부터 n까지 증가한다. k는 열의 위치로 n부터 1씩 감소한다. for문에서 초기값과 증감에 여러개의 연산을 처리하려면 위와 같이 ','로 구분하여 작성하면 된다. 

    04 : 알파벳이 'Z'보다 커지면 'A'로 바꾸어 준다.


    CharacterTriangle1.h

    #include <iostream>

     

    CharacterTriangle1.cpp

    void CharacterTriangle1::Code()
    {
    	int n;
    
    	std::cin >> n;
    
    	char arr[101][101]{};
    
    	for (int i = 0; i < 101; i++)
    	{
    		for (int j = 0; j < 101; j++)
    		{
    			arr[i][j] = ' ';
    		}
    	}
    
    	char ch{ 'A' };
    	for (int i = 0; i < n; i++)
    	{
    		for (int j = i, k = n - 1; j < n; j++, k--)
    		{
    			arr[j][k] = ch++;
    
    			if (ch > 'Z')
    			{
    				ch = 'A';
    			}
    		}
    	}
    
    	for (int i = 0; i < n; i++)
    	{
    		for (int j = 0; j < n; j++)
    		{
    			std::cout << arr[i][j] << ' ';
    		}
    		std::cout << '\n';
    	}
    }

     

    Beginner_Coder/도형만들기1/문자삼각형2


    문제                                            

    삼각형의 높이 N을 입력받아서 아래와 같이 문자 'A'부터 차례대로 맨 오른쪽 가운데 행부터 차례대로 아래와 같이 채워서

    삼각형 모양을 출력하는 프로그램을 작성하시오.

    < 처리조건 > 

    (1) 오른쪽 가운데 행에 문자 'A'를 채우고 왼쪽 열로 이동하여 위에서 아래로 채워나간다.

    (2) 가장 왼쪽 행까지 반복하여 모두 채워 나간다. (문자 'Z'다음에는 'A'부터 다시 시작한다.)

     

    입력 형식                                     

    삼각형의 높이 N(N의 범위는 1이상 100 이하의 홀수)을 입력받는다.

     

    출력 형식                                     

    주어진 형태대로 높이가 N인 문자삼각형을 출력한다. 문자 사이는 한 개의 공백으로 구분한다. 입력범위를 벗어나면 "INPUT ERROR"를 출력한다.

     

    입력 예                                        

    5

     

    출력 예                                        

    E
    F B
    G C A
    H D
    I

     

    Hint!

    <생각하기>

    열 우선으로 작성하면 된다. 열 번호에 따른 행의 범위는 다음과 같다.

    열 번호 행의 시작 행의 끝
    3 3 3
    2 2 4
    1 1 5

    열 번호를 i라 하면 시작위치는 i와 같고 끝위치는 (n / 2) * 2 - i 와 같다.


    CharacterTriangle2.h

    #include <iostream>

     

    CharacterTriangle2.cpp

    void CharacterTriangle2::Code()
    {
    	int n;
    
    	std::cin >> n;
    
    	if (n % 2 == 0 || n > 100)
    	{
    		std::cout << "INPUT ERROR";
    	}
    	else
    	{
    		char arr[101][101]{};
    
    		for (int i = 0; i < 101; i++)
    		{
    			for (int j = 0; j < 101; j++)
    			{
    				arr[i][j] = ' ';
    			}
    		}
    
    		char ch{ 'A' };
    
    		for (int i = n / 2; i >= 0; i--)
    		{
    			for (int j = i; j < n - i; j++)
    			{
    				arr[j][i] = ch++;
    
    				if (ch > 'Z')
    				{
    					ch = 'A';
    				}
    			}
    		}
    
    		for (int i = 0; i < n; i++)
    		{
    			for (int j = 0; j < n; j++)
    			{
    				std::cout << arr[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.