-
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