0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 v
가 주어진다.
v
에서 찾을 수 없는 숫자를 모두 더한 수를 리턴하는 문제.
이 문제에서 중요한 건 범위가 0부터 9까지이고 중복된 수는 없다는 것이다.
여기서 1부터 9까지를 모두 더한 수인 45를 일종의 키로 활용할 수 있다.
이 사실을 인지하지 못하고 문제를 접근했다.
처음 제시한 답안은 아래와 같다.
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> numbers) {
int answer = 0;
for(int i = 1; i < 10; ++i)
if (find(numbers.begin(), numbers.end(), i) != numbers.end())
continue;
else
answer += i;
return answer;
}
find()
를 통해 해당 값의 존재여부를 검사하며 하나씩 더해 나간다.
많은 사람들이 떠올릴 법한 정석적인 방법이다.
하지만 아까 말했듯이 키를 활용할 수 있다.
45에서 배열의 모든 원소를 더한 값을 빼면 정확히 우리가 찾는 답이 나온다.
#include <numeric>
int solution(vector<int> numbers) {
return 45 - accumulate(numbers.begin(), numbers.end(), 0);
}
그 점을 활용한다면 이렇게 단 한 줄로 해결이 된다.
이런 점들을 찾아가는 재미가 있는 것 같다.
'Camp > T.I.L.' 카테고리의 다른 글
[TIL #18] 약수의 개수와 덧셈 (0) | 2024.07.12 |
---|---|
[TIL #17] 가운데 글자 가져오기 (0) | 2024.07.11 |
[TIL #15] 콜라츠 추측 (0) | 2024.07.09 |
[TIL #14] 정수 내림차순으로 배치하기 (0) | 2024.07.04 |
[TIL #13] 정수 제곱근 판별 (0) | 2024.07.03 |