-
[ 11024 ] 더하기 4 - 입출력알고리즘/BOJ 2021. 7. 26. 15:47
< 입출력 > - < solve등급 >
[ 11024 ]
더하기 4
수 N개가 주어졌을 때, N개의 합을 구하는 프로그램을 작성하시오.
:: 입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, N(1 ≤ N ≤ 100)개의 수가 공백으로 구분되어서 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다. 또, 0으로 시작하는 수는 주어지지 않는다.
:: 출력
각 테스트 케이스마다 입력받은 수 N개의 합을 한 줄에 하나씩 입력받은 순서대로 출력한다.
- try 1
: 그 전에 11023 문제를 풀고 eof 처리하는 걸 배워서
비슷한 형식이라 생각해서 그렇게 풀어봤음 근데 eof 를 체크하면 반복문을 탈출해야하는데 탈출을 안함 ㅜㅜ
#include <string> #include <vector> #include <iostream> #include <algorithm> using namespace std; #define endl "\n" int main() { int n = 0, total =0; vector<int> nums; cin >> n; for (int i = 0; i < n; i++) { int k = 0; cin >> k; while (cin.eof() != true) { total += k; } nums.push_back(total); total = 0; } for (int i = 0; i < nums.size(); i++) { cout << nums[i] << endl; } }
아이디어
우선 내가 생각한 방식으로 푸는 게 아니라 한 줄씩 입력 받아서 숫자를 구분하는 방식이었다.
11023번에서 생각했던 솔루션을 이쪽에 써야햇음 ,,
cin 에 입력된 정수와 \n이 들어간다는 사실을 알았다.
그리고 cin은 \n을 완전히 무시한다는 사실도 알았다.
그래서 내가 짰던 코드에서 eof가 안 먹었던건가
몇번 실험을 해봐야 할 듯 !
정답 코드
#include <string> #include <vector> #include <iostream> #include <algorithm> using namespace std; #define endl "\n" int main() { int t; cin >> t; //cin의 입력버퍼에는 정수 t와 \n이 들어간다 얘는 안 없어진다 따라서 getline()에서 //인자입력을 default로는 \n으로 구분하기 때문에 cin의 입력버퍼를 비워줘야 된다. cin.ignore(); //cin의 입력버퍼를 비워주는 함수이다. while (t--) { string n; int sum = 0; getline(cin, n); string tmp = ""; int nlen = n.size(); for (int i = 0; i < nlen; i++) { tmp += n[i]; if (n[i] == ' ' || i == nlen - 1) { sum += stoi(tmp); tmp = ""; } } cout << sum << '\n'; } }
'알고리즘 > BOJ' 카테고리의 다른 글
[ 10808 ] 알파벳 개수 - array, vector (0) 2021.07.26 [ 10807 ] 개수 세기 - array, vector (0) 2021.07.26 [ 11023 ] 더하기 3 - 입출력 (0) 2021.07.26 X - [ 11719 ] 그대로 출력하기 2 - 구현 (0) 2021.07.23 X - [ 11718 ] 그대로 출력하기 - 구현 (0) 2021.07.23