2026. 3. 11. 16:09ㆍTIL

프로그래머스 문제를 풀면서 최대한 문제를 건드리지 않고 풀려고 하다가 오답은 아니지만 최선의 답이 아니였던 답을 내 다시 문제를 풀게 되었다.
다음 문제는 제곱근을 확인하는 문제이다.
내가 처음에 풀었던 답안은 다음과 같다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
long long solution(long long n) {
long long answer = 0;
for(int x=1; x*x <= n; ++x)
{
if(x*x == n)
answer = (x+1)*(x+1);
}
if(answer != 0)
return answer;
else
return -1;
}
기본적인 헤더와 함수를 최대한 활용하려고 건드리지 않고 풀었다.

하지만 n이 커질수록 x*x <= n의 반복문을 검사하기 때문에 최대 √N번 반복하게 되어 시간이 초과되어 오답으로 된 경우이다.
이 문제를 해결하기 위해 C 내에 있는 수학 라이브러리 제곱근 함수 sqrt()를 사용했다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>
long long solution(long long n) {
long long x = (long long)sqrt(n);
if(x*x == n)
return (x+1)*(x+1);
else
return -1;
}
수정한 코드이다.
sqrt()는 double을 반환하기 때문에 (long long)으로 타입을 맞춰주어야 한다.
이렇게 되면 처음에
O( √N )이던 시간복잡도가
O( 1 )로 매우 빨라지게 되어 오류가 나지 않게된다.
여기서 sqrt()를 확인하며 수학 라이브러리 함수에 대한 정보가 부족한 것 같아 조금 공부를 해보았다.
<Math.h>
sqrt() 등 다른 수학 라이브러리 함수를 사용하기 위해서는 <math.h>를 상단에 선언해야 한다.
sqrt()
방금 사용했던 제곱근 관련 함수이다.
#include <stdio.h>
#include <math.h>
int main() {
double x = 16.0;
double result = sqrt(x);
printf("%f\n", result);
}
이런식으로 사용할 수 있는데, 이렇게 하면
4.000000 을 출력한다.
특징
- 반환 타입 : double
- 입력 값이 음수이면 NaN을 반환
거듭제곱 함수 pow()
제곱근 말고도 거듭제곱 함수도 있다.
pow()를 사용하면
double result = pow(2, 3);
>> 8
이런식으로 제곱을 구할 수 있다.
괄호 앞 부분에는 곱할 수, 뒷 부분에는 몇 번을 곱할지를 입력하면 된다.
절댓값 관련 함수 fabs()
실수의 절댓값을 구하는 함수이다.
double x = -3.5;
double result = fabs(x);
이렇게 -3.5를 fabs에 넣고 출력하면

부호가 사라진 절댓값이 출력되는 것을 확인할 수 있다.
삼각함수
각도를 계산할 때 사용할 수 있는 함수이다.
- sin(x) : 사인 값
- cos(x) : 코사인 값
- tan(x) : 탄젠트 값
double result = sin(0);
예를 들어서 이렇게 sin(0)을 입력하면

0.000000값이 출력된다. 라디안 기준이라는 점이 중요하다.
로그 / 지수 함수
- log(x) : 자연로그
- log10(x) : 상용로그
- exp(x) : e^x
자연 로그의 출력 예시
double result = log(10);

반올림 함수
- ceil(x) : 올림
- floor(x) : 내림
- round(x) : 반올림
올림 예시
double result = ceil(3.2);

자연수 1 간격으로 올림 / 내림 / 반올림 되는 것을 확인할 수 있다.
'TIL' 카테고리의 다른 글
| Unreal Engine C++ (1) | 2026.03.27 |
|---|---|
| C++ < String > (0) | 2026.03.12 |
| C++ < STL (기초) > (1) | 2026.03.10 |
| C++ < Template(템플릿) > (0) | 2026.03.10 |
| C++ < 자원 관리(스택 메모리, 힙 메모리, 스마트 포인터) > (0) | 2026.03.09 |