분명 2025년이 되어서 회고도 쓰려했는데 생각보다 시간이 많-이 지났다..
기초부터 다시 꼼꼼히 다져보자는 마음으로 프로그래머스 기초 트레이닝을 풀기 시작했다.
목표는 좀 더 간결하고 C++의 다양한 함수를 사용하기로 했다.
https://school.programmers.co.kr/learn/courses/30/lessons/181931
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
🧩 문제 설명
어떤 등차수열에서 초항이 a, 공차가 d인 수열의 각 항 중에서
included[i] == true인 항만 골라 모두 더한 값을 구하는 문제이다.
예를 들어:
- a = 3, d = 2
- included = [true, false, false, true, true]
이 경우 등차수열은 3, 5, 7, 9, 11이고,
true인 항은 3, 9, 11 → 총합은 23이 된다.
😶🌫️코드 보기🔽
#include <vector>
using namespace std;
int solution(int a, int d, vector<bool> included) {
int answer = 0;
for(int i = 0; i < included.size(); ++i)
{
if(included[i]) answer += a + d * i;
}
return answer;
}
간단하게 if 구문을 넣어서 다음과 같이 풀어보았다.
- included[i]가 true일 때만 i번째 항을 더함
- 등차수열의 i번째 항은 a + d * i로 계산
- 조건을 만족하는 항만 누적해서 더한 뒤 answer를 반환
나름 깰-끔하게 풀었다고 생각했는데 STL을 사용한 코드가 있어서 아직 배울게 많구나 했다.
😶🌫️코드 보기🔽
#include <numeric>
#include <vector>
int i = 0;
int solution(int a, int d, vector<bool> v) {
int i = 0;
return accumulate(v.begin(), v.end(), 0, [&](int sum, bool flag) {
int result = flag ? a + d * i : 0;
++i;
return sum + result;
});
}
[&] 는 람다(lambda) 함수의 시작 부분에서 Capture, 캡처 라는 문법이다.
람다 함수 안에서 외부에 있는 지역 변수들을 참조(reference)로 사용할 수 있게 해준다.
세상에는 고수가 많다. 🤔
std::accumulate 란 컨테이너(배열, 벡터 등)의 요소를 순회하면서 누적 합계를 계산하는 함수 이고
C++의 <numeric> 헤더에 포함되어 있다.
template <class InputIterator, class Type>
Type accumulate(
InputIterator first,
InputIterator last,
Type init);
template <class InputIterator, class Type, class BinaryOperation>
Type accumulate(
InputIterator first,
InputIterator last,
Type init,
BinaryOperation binary_op);
first부터 last까지의 요소를 init 값에 누적하며 binary_op 연산(기본은 +)을 적용한 결과를 반환한다.
기초적인 알고리즘 문제일 수 있지만 좀더 세련되게 풀어보는걸 꾸준히 목표로 해야겠다.
https://learn.microsoft.com/ko-kr/cpp/standard-library/numeric-functions?view=msvc-170#accumulate
<numeric> 함수
C++ 표준 라이브러리의 헤더에서 제공하는 함수 템플릿에 대해 설명합니다.
learn.microsoft.com
'Algorithms' 카테고리의 다른 글
BaekJoon_거스름돈_DynamicProgramming (0) | 2024.12.27 |
---|---|
Hackerrank_Lily's Homework_사이클 분할 (0) | 2024.10.27 |
HackerRank_Medium_Common Child && 스택의 비밀 (2) | 2024.07.18 |
Programmers_Level3_징검다리 건너기 (3) | 2024.07.04 |
Programmers_Level3_기지국 설치 (2) | 2024.06.07 |