2023. 9. 14. 02:27, 알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/120815
#include <string>
#include <vector>
#include <numeric>
using namespace std;
int solution(int n) {
return lcm(n,6)/6;
}
처음에 lcm을 쓰는데 이게 math헤더인가 하고 첨부해보니 없어서 어디에 있는지 모르겠어서 #include <bits/stdc++.h> 로 제출하여서 해결하였다.
그 후에 어디에 있는지 검색할때 gpt를 사용해보았는데 gpt는 잘못된 답을 제시해주었다.
C++ 표준 라이브러리에는 `lcm` 함수가 포함되어 있지 않습니다. `lcm` 함수를 사용하려면 다른 방법을 찾거나 직접 구현해야 합니다.
`lcm` (최소 공배수)를 계산하려면 다음과 같이 구현할 수 있습니다.
```cpp
#include <iostream>
#include <algorithm>
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}
int main() {
int a = 12;
int b = 18;
int result = lcm(a, b);
std::cout << "LCM of " << a << " and " << b << " is " << result << std::endl;
return 0;
}
```
위 코드에서 `gcd` 함수는 최대 공약수(GCD)를 계산하고, `lcm` 함수는 최소 공배수(LCM)를 계산합니다.
이 두 함수를 사용하여 LCM을 계산할 수 있습니다.
그 후에 추가질문으로 아래와 같은 답변을 얻을 수 있었다.
제가 제공하는 정보가 2021년 9월 기준이라서, 그 이후에 C++ 표준 라이브러리에 변경이 있을 수 있습니다.
2021년 9월까지의 정보로는 C++ 표준 라이브러리에 `gcd()`와 `lcm()` 함수가 직접 포함되어 있지 않았습니다.
C++11부터 C++ 표준 라이브러리에 `<numeric>` 헤더에 `std::gcd()`와 `std::lcm()` 함수가
포함되었습니다. 이 헤더를 포함하고 해당 함수를 사용할 수 있습니다. 아래는 간단한 예제 코드입니다.
```cpp
#include <iostream>
#include <numeric>
int main() {
int a = 12;
int b = 18;
int gcd_result = std::gcd(a, b);
int lcm_result = std::lcm(a, b);
std::cout << "GCD of " << a << " and " << b << " is " << gcd_result << std::endl;
std::cout << "LCM of " << a << " and " << b << " is " << lcm_result << std::endl;
return 0;
}
```
따라서 C++11 이상의 버전을 사용하고 있다면, `<numeric>` 헤더를 포함하고 `std::gcd()`와
`std::lcm()` 함수를 사용할 수 있습니다.
항상 gpt에서 제공해주는 정보를 믿어서는 안될것 같다.
그래서 구글검색을 통해서 블로그를 찾아 들어갔고 해당 블로그에서 아래와 같은 정보를 얻을 수 있었다.
위와 같은 정보를 기반으로 찾아보니,
https://en.cppreference.com/w/cpp/numeric/gcd
https://en.cppreference.com/w/cpp/numeric/lcm
gcd와 lcm이 c++17부터 numeric 헤더를 이용해서 사용할 수 있다는걸 알 수 있었고, gpt는 자기가 21년 9월까지의 정보를 기반으로 한다고 해서 모른다고 하지만, c++17의 출시일을 검색해보니,
최종 표준이 2017년 12월에 출시되었다는걸 알 수 있었다.
gpt의 정보를 너무 맹신하진 말자.
참조
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Lv 0. 배열의 평균값 (0) | 2023.09.14 |
---|---|
Lv 0. 피자 나눠 먹기(3) (0) | 2023.09.14 |
Lv 0. 피자 나눠 먹기(1) - 나머지 연산자는 %다. &로 착각하지 말자. (0) | 2023.09.14 |
Lv 0. 최빈값 구하기 || 전역변수로 선언한 변수나 자료구조도 사용할 수 있다는걸 배움. (0) | 2023.09.14 |
Lv 0. 짝수는 싫어요 || vector에서 emplace_back()과 push_back()의 차이점 (0) | 2023.09.13 |
Comments, Trackbacks