보관함

JUNGOL 기초다지기 10 배열2

niamdank 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