보관함
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