Bakjoon Q21093912 - C++
Q19246574 // 함수구현 문제
Problem
정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하시오.
Input
-
Output
-
작성해야하는 함수
1
long long sum(std::vector<int> &a);
인수 설명
- a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)
- 리턴값: a에 포함되어 있는 정수 n개의 합
나의 제출
1
2
3
4
5
6
7
8
9
10
11
#include <vector>
long long sum(std::vector<int> &a) {
long long ans = 0;
int i=0;
int n =a.size();
while(n--){
ans+=a[i];
i++;
}
return ans;
}
참고 제출
1
2
3
4
5
6
7
8
#include <vector>
long long sum(std::vector<int> &a) {
long long ans = 0;
for (auto v : a) {
ans += v;
}
return ans;
}
추가내용
vector libray를 처음 써보는거라 좀 생소했다. C로 제출하는 경우에는 아주 단순했는데, c++의 경우에는 입력이 vector형식으로만 받아야 해서 무조건 vector library를 써야했다. 내 제출 코드의 경우에는 단순해서 크게 설명할 거리가 없다. 간단하게 설명하자면
- sum 함수의 인수로서 vector
형식의 벡터 a의 주소(&a)를 받는다. - 벡터 내의 개수가 몇개인지 확인하는 (vecotr name).size() 인자를 이용해 n에 부여했고 이를 통해 n번 iterate 했다.
참고 제출한 코드의 경우에는 경이 그 자체이다. c++ 11버전에 추가된 범위기반 for문과 타입 추론 기능을 이용한 완전무결하게 깔끔한 코드이다. knowledge글에서 자세히 설명하고 여기선 간단하게만 설명하겠다.
- range based for loop를 이용해서 정해진 array나 vector (이 코드에선 vector a)안을 iterate 시켰다. 이때 “:”이 사용됐다.
- auto를 이용해서 새로운 변수 v를 vector의 자료형과 맞게 알아서 분류하도록 컴파일러한테 명령했다.
총평
그동안 너무 old한 c++만을 사용했던 것 같다. 새롭고 편리한 method들이 있는만큼 그걸 다방면으로 활용해봐야겠다. 또 잘 기록해서 언제든 내가 다시 들춰볼 수 있도록 보기 좋게 정리해놔야 겠다.