나 개발자 진짜 되냐?

바킹독 0x01 문제3 본문

C++을 시작해봐요!/알고리즘을 공부해봐요!

바킹독 0x01 문제3

Snow Rabbit 2025. 5. 3. 17:46

 

오늘은 3번을 풀어보자


 

if ( N 루트 씌워서 딲 떨어지면 ) return 1;

아니면 return 0;

인건 알겠는데..

N이 10억이하의 자연수인 게 마음에 걸린다.

엄청 큰 숫자인데..

시간복잡도에 따라 천차만별일거라고 예상된다.

 

혼자 열심히 써보았다.

 

 

아쉬운 부분은 i가 1부터 올라가면서 1의 제곱이 N과 일치하는지 보기 때문에

 

i < 2/N이 아니라

i * i 가 N보다 작거나 같을때까지 돌리는 게 맞다.

 

그래서 답은

 

 

이렇게 나와야 한다!

 

생각보다 쉬워서 다행이었다.

아니면..내가 잘한 걸 지도? ㅎㅎㅋ

 

 

 * 번외

 

알고리즘 대회나 고성능 요구환경에서는 sqrt 방식을 추천한다고 한다.

sqrt는 제곱근을 구할때 사용하는 함수이다.

 

지선생의 말씀이라 굳이 굳이 싶었지만ㅎㅋ 함께 보자.....

 

라이브러리 불필요한 위의 방식과 다르게

sqrt는 반복문도 없고 메모리도 거의 안 쓰는

라이브러리 형식이라고 한다.

 

 

이 친구를 쓰려면

#include <cmath> 를 써줘야 한다!

 

중요한 부분은 제곱근 라이브러리다 보니 실수형이라..

기본 반환값이 double이고,

int로 바꿔주려면 int root = (int)라고 써줘야 한다.

sqrt(N)은

N에 루트를 씌웠다는 뜻이 된다.

 

참 간단하긴 하네 ㅎㅎㅋ

 

하지만 내가 이걸 다 학습할 수 있을까?