ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JUNGOL 기초다지기 10 배열2
    보관함 2019. 12. 2. 21:39

    프로그래밍에서 가장 기초적인 내용을 다루는 기초 다지기입니다.

    이번 포스팅은 기초 다지기 중 열 번째인 배열2 문제를 풀어보도록 하겠습니다.

     

    기초 내용인 만큼 다른 설명없이 문제와 코드만 간단하게 작성하도록 하겠습니다.


    564 : 배열2 - 자가진단1

    #include <iostream>
    
    using namespace std;
    
    bool IsBigAlpha(char ch);
    
    int main(void)
    {
    	int arr[26]{};
    
    	char ch;
    	while(true)
    	{
    		cin >> ch;
    		if (!IsBigAlpha(ch))
    		{
    			break;
    		}
    
    		arr[ch - 'A']++;
    	}
    
    	for (int i = 0; i < 26; ++i)
    	{
    		if (arr[i] > 0)
    			cout << static_cast<char>('A' + i) << " : " << arr[i] << endl;
    	}
    }
    
    bool IsBigAlpha(char ch)
    {
    	if (ch < 'A') return false;
    	if (ch > 'Z') return false;
    	return true;
    }

     

    565 : 배열2 - 자가진단2

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[10]{};
    
    	int var;
    	while (true)
    	{
    		cin >> var;
    		if (var == 0)
    			break;
    
    		arr[var / 10]++;
    	}
    
    	for (int i = 0; i < 10; ++i)
    	{
    		if (arr[i] != 0)
    		{
    			cout << i << " : " << arr[i] << endl;
    		}
    	}
    }

     

    566 : 배열2 - 자가진단3

     

    사실 이 문제는 배열을 사용하지 않고도 충분히 해결이 가능합니다.

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[101]{ 100 };
    
    	cin >> arr[1];
    
    	cout << arr[0] << ' ' << arr[1] << ' ';
    
    	for (int i = 2; i < 101; ++i)
    	{
    		arr[i] = arr[i - 2] - arr[i - 1];
    		cout << arr[i] << ' ';
    		if (arr[i] < 0)
    			break;
    	}
    	cout << endl;
    }

     

    567 : 배열2 - 자가진단4

    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[3][5]{
    		5, 8, 10, 6, 4,
    		11, 20, 1, 13, 2,
    		7, 9, 14, 22, 3 };
    
    	cout.setf(ios::right);
    
    	for (int i = 0; i < 3; ++i)
    	{
    		for (int j = 0; j < 5; ++j)
    		{
    			cout << setw(2) << arr[i][j] << "   ";
    		}
    		cout << endl;
    	}
    }

     

    568 : 배열2 - 자가진단5

     

    이 문제는 배열 하나만 사용하여 처리가 가능합니다.

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[2][4];
    
    	cout << "first array" << endl;
    	for (int i = 0; i < 2; ++i)
    	{
    		for (int j = 0; j < 4; ++j)
    		{
    			cin >> arr[i][j];
    		}
    	}
    
    	int var;
    	cout << "second array" << endl;
    	for (int i = 0; i < 2; ++i)
    	{
    		for (int j = 0; j < 4; ++j)
    		{
    			cin >> var;
    			arr[i][j] *= var;
    		}
    	}
    
    	for (int i = 0; i < 2; ++i)
    	{
    		for (int j = 0; j < 4; ++j)
    		{
    			cout << arr[i][j] << ' ';
    		}
    		cout << endl;
    	}
    }

     

    569 : 배열2 - 자가진단6

     

    배열을 조금 더 크게 만들어서 합과 평균을 저장해 입력받는 반복문 내에서 출력까지 할 수 있습니다.

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[5][6];
    
    	int count = 0;
    	for (int i = 0; i < 5; ++i)
    	{
    		for (int j = 0; j < 4; ++j)
    		{
    			cin >> arr[i][j];
    		}
    		arr[i][4] = arr[i][0] + arr[i][1] + arr[i][2] + arr[i][3];
    		arr[i][5] = arr[i][4] / 4;
    		if (arr[i][5] >= 80)
    		{
    			cout << "pass" << endl;
    			count++;
    		}
    		else
    			cout << "fail" << endl;
    	}
    	
    	cout << "Successful : " << count << endl;
    }

     

    570 : 배열2 - 자가진단7

     

    이번 문제는 배열의 경계를 주의하면 쉽게 풀 수 있습니다.

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[5][5]{ 1, 1, 1, 1, 1 };
    
    	int leftNum;
    	for (int i = 1; i < 5; ++i)
    	{
    		for (int j = 0; j < 5; ++j)
    		{
    			leftNum = (j > 0) ? arr[i][j - 1] : 0;
    			arr[i][j] = leftNum + arr[i - 1][j];
    		}
    	}
    
    	for (int i = 0; i < 5; ++i)
    	{
    		for (int j = 0; j < 5; ++j)
    		{
    			cout << arr[i][j] << ' ';
    		}
    		cout << endl;
    	}
    }

     

    160 : 배열2 - 형성평가1

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[7]{};
    
    	int var;
    	for (int i = 0; i < 10; ++i)
    	{
    		cin >> var;
    		arr[var]++;
    	}
    
    	for (int i = 1; i <= 6; ++i)
    	{
    		cout << i << " : " << arr[i] << endl;
    	}
    }

     

    161 : 배열2 - 형성평가2

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[11]{};
    
    	int var;
    	for (int i = 0; i < 100; ++i)
    	{
    		cin >> var;
    		if (var == 0)
    			break;
    
    		arr[var / 10]++;
    	}
    
    	for (int i = 10; i >= 0; --i)
    	{
    		if (arr[i] != 0)
    			cout << i * 10 << " : " << arr[i] << " person" << endl;
    	}
    }

     

    162 : 배열2 - 형성평가3

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[10];
    
    	cin >> arr[0] >> arr[1];
    
    	for (int i = 2; i < 10; ++i)
    	{
    		arr[i] = (arr[i - 2] + arr[i - 1]) % 10;
    	}
    
    	for (int i = 0; i < 10; ++i)
    	{
    		cout << arr[i] << ' ';
    	}
    	cout << endl;
    }

     

    163 : 배열2 - 형성평가4

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[4][3]{
    		{3, 5, 9},
    		{2, 11, 5},
    		{8, 30, 10},
    		{22, 5, 1}
    	};
    
    	int sum = 0;
    	for (int i = 0; i < 4; ++i)
    	{
    		for (int j = 0; j < 3; ++j)
    		{
    			cout << arr[i][j] << ' ';
    			sum += arr[i][j];
    		}
    		cout << endl;
    	}
    
    	cout << sum << endl;
    }

     

    164 : 배열2 - 형성평가5

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[4][4]{};
    
    	for (int i = 0; i < 4; ++i)
    	{
    		cout << i + 1 << "class? ";
    		for (int j = 0; j < 3; ++j)
    		{
    			cin >> arr[i][j];
    			arr[i][3] += arr[i][j];
    		}
    	}
    
    	for (int i = 0; i < 4; ++i)
    	{
    		cout << i + 1 << "class : " << arr[i][3] << endl;
    	}
    }

     

    165 : 배열2 - 형성평가6

     

    자가진단7과는 다른 방법으로 예외처리를 진행했습니다.

    배열에서 해당 부분을 분리해 처리한 것인데요, 이 방법은 값이 정해져 있는 경우에 쓸 수 있으나 값이 변하는 경우(배열의 크기가 바뀌는 경우)에는 사용하기 어렵습니다.

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[5][5]{ {1,0,1,0,1} };
    
    	for (int i = 1; i < 5; ++i)
    	{
    		// 가장 왼쪽 예외처리
    		arr[i][0] = arr[i - 1][1];
    		for (int j = 1; j < 4; ++j)
    		{
    			arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j + 1];
    		}
    		// 가장 오른쪽 예외처리
    		arr[i][4] = arr[i - 1][3];
    	}
    
    	for (int i = 0; i < 5; ++i)
    	{
    		for (int j = 0; j < 5; ++j)
    		{
    			cout << arr[i][j] << ' ';
    		}
    		cout << endl;
    	}
    }

     

    166 : 배열2 - 형성평가7

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[2][3];
    
    	cout << "first array" << endl;
    	for (int i = 0; i < 2; ++i)
    	{
    		for (int j = 0; j < 3; ++j)
    		{
    			cin >> arr[i][j];
    		}
    	}
    
    	cout << "second array" << endl;
    	int var;
    	for (int i = 0; i < 2; ++i)
    	{
    		for (int j = 0; j < 3; ++j)
    		{
    			cin >> var;
    			arr[i][j] *= var;
    		}
    	}
    
    	for (int i = 0; i < 2; ++i)
    	{
    		for (int j = 0; j < 3; ++j)
    		{
    			cout << arr[i][j] << ' ';
    		}
    		cout << endl;
    	}
    }

     

    167 : 배열2 - 형성평가8

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int arr[4][2];
    
    	for (int i = 0; i < 4; ++i)
    	{
    		for (int j = 0; j < 2; ++j)
    		{
    			cin >> arr[i][j];
    		}
    	}
    
    	// 가로 평균
    	for (int i = 0; i < 4; ++i)
    	{
    		int sum = 0;
    		for (int j = 0; j < 2; ++j)
    		{
    			sum += arr[i][j];
    		}
    		int avg = sum / 2;
    		cout << avg << ' ';
    	}
    	cout << endl;
    
    	// 세로 평균
    	for (int i = 0; i < 2; ++i)
    	{
    		int sum = 0;
    		for (int j = 0; j < 4; ++j)
    		{
    			sum += arr[j][i];
    		}
    		int avg = sum / 4;
    		cout << avg << ' ';
    	}
    	cout << endl;
    
    	// 전체 평균
    	int sum = 0;
    	for (int i = 0; i < 2; ++i)
    	{
    		for (int j = 0; j < 4; ++j)
    		{
    			sum += arr[j][i];
    		}
    	}
    	int avg = sum / 8;
    	cout << avg << endl;
    }

     

    168 : 배열2 - 형성평가9

     

    각 단계별 값은 해당 값의 바로 아래 값과 아래의 왼쪽의 값의 합입니다.

    이를 유념하고 출력할 때 위, 아래만 바꿔서 출력하면 쉽게 해결이 가능합니다.

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	int var;
    
    	cin >> var;
    
    	int arr[10][10]{ {1} };
    
    	for (int i = 1; i < var; ++i)
    	{
    		arr[i][0] = arr[i - 1][0];
    		for (int j = 1; j <= i; ++j)
    		{
    			arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
    		}
    	}
    
    	for (int i = var - 1; i >= 0; --i)
    	{
    		for (int j = 0; j <= i; ++j)
    		{
    			cout << arr[i][j] << ' ';
    		}
    		cout << endl;
    	}
    }

     

    169 : 배열2 - 형성평가A

     

    이 문제는 아스키 코드 값을 이용한 문제입니다.

    대문자 A가 65, 소문자 a가 97이라는 것을 알면 쉽게 해결이 가능합니다.

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
    	char arr[3][5];
    
    	for (int i = 0; i < 3; ++i)
    	{
    		for (int j = 0; j < 5; ++j)
    		{
    			cin >> arr[i][j];
    			arr[i][j] += 32;
    		}
    	}
    
    	for (int i = 0; i < 3; ++i)
    	{
    		for (int j = 0; j < 5; ++j)
    		{
    			cout << arr[i][j] << ' ';
    		}
    		cout << endl;
    	}
    }

     

    http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&sca=10a0

     

    JUNGOL | 문제은행 1 페이지

     

    www.jungol.co.kr

    댓글

Designed by Tistory.