-
JUNGOL 기초다지기 18 파일입출력보관함 2020. 1. 12. 10:01
프로그래밍에서 가장 기초적인 내용을 다루는 기초 다지기입니다.
이번 포스팅은 기초 다지기 중 열여덟 번째인 파일입출력 문제를 풀어보도록 하겠습니다.
기초 내용인 만큼 다른 설명없이 문제와 코드만 간단하게 작성하도록 하겠습니다.
626 : 파일입출력 - 자가진단1
#include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; int beg = (a < b) ? a : b; int end = (a > b) ? a : b; int sum = 0; for (; beg <= end; sum += beg++); cout << sum << endl; }
627 : 파일입출력 - 자가진단2
#include <iostream> using namespace std; int main() { float sum = 0; float temp; for (int i = 0; i < 10; ++i) { cin >> temp; if (i == 0 || i == 9) { sum += temp; } } float avg = sum / 2; cout.setf(ios::fixed); cout.precision(1); cout << avg << endl; }
628 : 파일입출력 - 자가진단3
약간 헷갈리는 문제였는데요, 저는 기존 위치를 나타내는 값을 추가로 두어서 일단 점수로 정렬한 뒤 순위를 정하고 출력시에 기존 위치를 기준으로 출력 했습니다.
또, 순위를 정할 때 같은 값은 같은 순위가 되어야 하므로 이전 점수와 순위를 저장하도록 했습니다.
#include <iostream> #include <iomanip> #include <string> using namespace std; struct Student { string name; int score; int rank; int orig; }; int main() { Student arr[10]; for (int i = 0; i < 10; ++i) { cin >> arr[i].name >> arr[i].score; arr[i].orig = i; } for (int i = 0; i < 10; ++i) { for (int j = 0; j < 9 - i; ++j) { if (arr[j].score < arr[j + 1].score) { swap(arr[j], arr[j + 1]); } } } int preScore = -999; int preRank = 1; for (int i = 0; i < 10; ++i) { if (preScore == arr[i].score) { arr[i].rank = preRank; } else { arr[i].rank = i + 1; } preScore = arr[i].score; preRank = arr[i].rank; } cout.setf(ios::right); cout << "Name Score Rank\n"; for (int i = 0; i < 10; ++i) { for (int j = 0; j < 10; ++j) { if (arr[j].orig == i) { cout << setw(4) << arr[j].name << ' ' << setw(5) << arr[j].score << ' ' << setw(4) << arr[j].rank << endl; break; } } } }
629 : 파일입출력 - 자가진단4
#include <iostream> #include <string> using namespace std; int main() { string str1, str2; getline(cin, str1); getline(cin, str2); if (str1.size() < str2.size()) { cout << str1 << endl; cout << str2 << endl; } else { cout << str2 << endl; cout << str1 << endl; } }
630 : 파일입출력 - 자가진단5
cin 버퍼에 잔여 입력이 남아 이후에 들어오는 값이 제대로 인식되지 않는 경우가 발생합니다.
이런 경우 버퍼를 비워줄 필요가 있습니다. 이는 다음과 같이 cin.clear()와 cin.ignore()로 가능합니다.
cin.ignore로 넘겨준 각각의 값은 얼마나 무시 할지, 그리고 어떤 값이 나올때까지 진행할지로 생각하시면 됩니다.
#include <iostream> #include <vector> #include <string> using namespace std; int main() { int n; cin >> n; vector<string> strArr; strArr.reserve(n); cin.clear(); cin.ignore(9999999, '\n'); string temp; for (int i = 0; i < n; ++i) { getline(cin, temp); strArr.emplace_back(temp); } for (int i = n - 1; i >= 0; --i) { cout << strArr[i] << endl; } }
631 : 파일입출력 - 자가진단6
#include <iostream> #include <cmath> using namespace std; const float PI = 3.14; float GetRadius(float var); int main() { float var; cout.setf(ios::fixed); cout.precision(2); while (true) { cin >> var; if (var == 0) break; cout << GetRadius(var) << endl; } } float GetRadius(float var) { return var / (2 * PI); }
205 : 파일입출력 - 형성평가1
#include <iostream> using namespace std; int main() { double a, b; cin >> a >> b; cout.setf(ios::fixed); cout.precision(2); cout << a << ' ' << b << ' ' << a + b << endl; }
206 : 파일입출력 - 형성평가2
#include <iostream> using namespace std; int main() { int a, b, c; cin >> a >> b >> c; int sum = a + b + c; int avg = sum / 3; int res = sum % 3; cout << sum << ' ' << avg << "..." << res << endl; }
207 : 파일입출력 - 형성평가3
#include <iostream> using namespace std; int main() { int a, b; char c; cin >> a >> b >> c; int result = 0; switch (c) { case '+': result = a + b; break; case '-': result = a - b; break; case '*': result = a * b; break; case '/': result = a / b; break; case '%': result = a % b; break; } cout << a << ' ' << c << ' ' << b << " = " << result << endl; }
208 : 파일입출력 - 형성평가4
#include <iostream> using namespace std; int main() { int n; cin >> n; int result = 1; while (n != 0) { result *= n--; } cout << result << endl; }
209 : 파일입출력 - 형성평가5
#include <iostream> #include <list> using namespace std; int main() { list<int> resultList; int n; while (true) { cin >> n; if (n == 0) break; if(n % 15 == 0) resultList.push_back(n); } if (resultList.size() > 0) { for (int var : resultList) { cout << var << ' '; } cout << endl; } cout << resultList.size() << endl; }
210 : 파일입출력 - 형성평가6
#include <iostream> using namespace std; int main() { int n; cin >> n; for (int i = 0; i < n; ++i) { for (int j = 0; j < n - 1 - i; ++j) { cout << " "; } for (int j = 0; j < 2 * i + 1; ++j) { cout << "* "; } cout << endl; } for (int i = n - 2; i >=0; --i) { for (int j = 0; j < n - 1 - i; ++j) { cout << " "; } for (int j = 0; j < 2 * i + 1; ++j) { cout << "* "; } cout << endl; } }
211 : 파일입출력 - 형성평가7
#include <iostream> using namespace std; bool IsYoon(int year); int main() { int beg, end; cin >> beg >> end; int count = 0; while (beg <= end) { if (IsYoon(beg++)) { count++; } } cout << count << endl; } bool IsYoon(int year) { if (year % 400 == 0) return true; if (year % 100 == 0) return false; if (year % 4 == 0) return true; return false; }
212 : 파일입출력 - 형성평가8
#include <iostream> using namespace std; int main() { int n; cin >> n; float* arr = new float[n]; int a, b, c; for (int i = 0; i < n; ++i) { cin >> a >> b >> c; arr[i] = (a + b + c) / 3.0f; } for (int i = 0; i < n; ++i) { for (int j = 0; j < n - 1 - i; ++j) { if (arr[j] < arr[j + 1]) swap(arr[j], arr[j + 1]); } } cout.setf(ios::fixed); cout.precision(1); for (int i = 0; i < n; ++i) { cout << arr[i] << endl; } delete[] arr; }
213 : 파일입출력 - 형성평가9
#include <iostream> #include <string> #include <sstream> #include <list> using namespace std; int main() { string str; stringstream sts; getline(cin, str); cout << str.size() << endl; int longest{ 0 }; string word; list<string> longestWordList; for (stringstream sts{ str }; sts >> word; ) { if (word.size() == longest) { longestWordList.push_back(word); } else if (word.size() > longest) { longestWordList.clear(); longest = word.size(); longestWordList.push_back(word); } } for (string str : longestWordList) { cout << str << ' '; } cout << endl; }
214 : 파일입출력 - 형성평가A
#include <iostream> #include <string> using namespace std; int main() { string strArr[10]; for (int i = 0; i < 10; ++i) { cin >> strArr[i]; } for (int i = 0; i < 10; ++i) { for (int j = 0; j < 9 - i; ++j) { if (strArr[j] > strArr[j + 1]) { swap(strArr[j], strArr[j + 1]); } } } char c; cin >> c; for (int i = 0; i < 10; ++i) { if (strArr[i].find(c) != -1) { cout << strArr[i] << endl; } } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&sca=10i0