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를 써야했다. 내 제출 코드의 경우에는 단순해서 크게 설명할 거리가 없다. 간단하게 설명하자면

  1. sum 함수의 인수로서 vector 형식의 벡터 a의 주소(&a)를 받는다.
  2. 벡터 내의 개수가 몇개인지 확인하는 (vecotr name).size() 인자를 이용해 n에 부여했고 이를 통해 n번 iterate 했다.

참고 제출한 코드의 경우에는 경이 그 자체이다. c++ 11버전에 추가된 범위기반 for문과 타입 추론 기능을 이용한 완전무결하게 깔끔한 코드이다. knowledge글에서 자세히 설명하고 여기선 간단하게만 설명하겠다.

  1. range based for loop를 이용해서 정해진 array나 vector (이 코드에선 vector a)안을 iterate 시켰다. 이때 “:”이 사용됐다.
  2. auto를 이용해서 새로운 변수 v를 vector의 자료형과 맞게 알아서 분류하도록 컴파일러한테 명령했다.

총평

그동안 너무 old한 c++만을 사용했던 것 같다. 새롭고 편리한 method들이 있는만큼 그걸 다방면으로 활용해봐야겠다. 또 잘 기록해서 언제든 내가 다시 들춰볼 수 있도록 보기 좋게 정리해놔야 겠다.