https://school.programmers.co.kr/learn/courses/30/le\ssons/77885
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <numeric>
using namespace std;
vector<long long> solution(vector<long long> numbers) {
return ::accumulate(numbers.begin(), numbers.end(), vector<long long>(), [&](auto acc, const auto& number) {
// 공식 (짝수도 동일)
// 3 = 011 (마지막 1의 개수 2개)
// 4 = 100
// 5 = 101 (3 + (2 * *(1의 개수 - 1))) = (3 + (2 * *(2 - 1))) = 5
long long n = 0, temp = number;
while (temp % 2)
++n, temp /= 2;
if (n == 0) n = 1; // n이 0이면 짝수인 경우인데, 무조건 +1은 해야하니까 n = 1
acc.emplace_back(number + pow(2, n - 1));
return acc;
});
}
'Coding Test > Programmers' 카테고리의 다른 글
[Programmers] (스택/큐) Lv 2. 다리를 지나는 트럭 (0) | 2023.07.23 |
---|---|
[Programmers] Lv 2. 롤케이크 자르기 (0) | 2023.07.21 |
[Programmers] Lv 2. 숫자 변환하기 (0) | 2023.07.20 |
[Programmers] Lv 2. 2 x N 타일링 (0) | 2023.07.19 |
[Programmers] (2018 KAKAO BLIND RECRUITMENT) Lv 2. [1차] 프렌즈4블록 (0) | 2023.07.18 |
댓글