https://school.programmers.co.kr/learn/courses/30/lessons/120909
함수를 활용한 풀이를 떠올려서 아래와 같은 코드를 작성해서 제출하였다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int solution(int n) {
int t=sqrt(n);
if(t*t==n) return 1;
return 2;
}
이때에 처음에 sqrt() 함수가 어디에 있는지 몰라서, 일단 #include <bits/stdc++.h> 으로 제출해서 통과하였고,
이후에 cmath헤더를 떠올려서 위와 같이 첨부해서 제출하고 통과하였다.
이때에 정확히 cmath 헤더와, math.h 헤더의 차이에 대해서 궁금해서 gpt에 검색해보았다.
`<cmath>` 헤더와 `<math.h>` 헤더는 C++ 프로그래밍에서 수학 연산과 관련된 함수 및 상수를 제공하는 헤더 파일입니다. 하지만 이 두 헤더 간에는 몇 가지 중요한 차이가 있습니다:
1. 네임스페이스:
- `<cmath>` 헤더: C++의 표준 라이브러리에 포함된 `<cmath>` 헤더는 `std` 네임스페이스에 정의된 수학 함수와 상수를 제공합니다. 따라서 이 헤더의 함수와 상수를 사용할 때에는 `std::` 접두사를 사용해야 합니다. 예를 들어, `std::sqrt` 함수는 제곱근을 계산합니다.
- `<math.h>` 헤더: `<math.h>` 헤더는 C 언어의 표준 수학 라이브러리 함수와 상수를 제공합니다. C++에서 이 헤더를 사용할 때에는 함수와 상수를 `std` 네임스페이스를 사용하지 않고 직접 호출해야 합니다. 예를 들어, `sqrt` 함수는 제곱근을 계산합니다.
2. 호환성:
- `<cmath>` 헤더는 C++에서 권장되는 헤더이며 C++ 표준 라이브러리에 속합니다. C++ 프로그래밍에서는 `<cmath>` 헤더를 사용하는 것이 일반적입니다.
- `<math.h>` 헤더는 C 언어의 표준 라이브러리 헤더이지만 C++에서도 사용할 수 있습니다. 그러나 C++에서는 `<cmath>` 헤더를 사용하는 것이 더 일반적이며 현대적인 방식입니다.
종합적으로, C++ 프로그래밍에서는 `<cmath>` 헤더를 사용하여 수학 연산을 처리하는 것이 권장됩니다. 이렇게 하면 표준 네임스페이스를 활용하고 더 많은 C++ 기능과 호환성을 제공받을 수 있습니다.
결국 cmath 헤더가 c++에 있는것, math.h 헤더가 c 언어에서 지원해주는 것이라는 것을 알 수 있었고, c++으로 작성할때는 cmath를 사용하는것이 더 적절할 것으로 보여진다. 물론 기억 안나서 math.h 를 사용하더라도 무방하겠지만.
다른 사람의 풀이를 보니까 충분히 생각해볼 수 있는 형태의 풀이가 가장 처음에 올라와있는데, 첨부해보자면
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
for(int i = 0; i < n; i++){
if(i*i == n) return 1;
}
return 2;
}
이와 같은 형태로 i 를 증가시켜 가면서 판별하고, 있다면 return 1, 없다면 return 2를 하는 형태의 코드.
내가 작성한 형태처럼 sqrt() 함수를 사용한 수로 제곱했을때 n이 되는지 확인하는 형태의 코드도 있어는데, pow() 함수를 사용하는 코드도 있어서 첨부해본다.
#include <cmath>
#include <iostream>
using namespace std;
int solution(int n) {
int i = sqrt(n);
if (pow(i, 2) == n)
return 1;
else
return 2;
}
pow를 사용할때도 cmath 헤더를 추가하면 되는것으로 보여진다.
pow 함수는 pow(a,b) 라고 할때, a라는 수를 b제곱 한 수를 반환해주는 함수 일 것으로 보여진다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Lv 0. 문자열 정렬하기 (0) | 2023.09.29 |
---|---|
Lv 0. 세균 증식 (0) | 2023.09.29 |
Lv 0. 문자열안에 문자열 *다시 풀어보기* **매우중요** (0) | 2023.09.29 |
Lv 0. OX퀴즈 (0) | 2023.09.28 |
Lv 0. 자릿수 더하기 (0) | 2023.09.28 |