일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 위클리 챌린지
- 10162
- 1620
- 4796
- 소수 체크
- colorSyntax
- 정수 삼각형
- Hasing
- Git Convention
- 18111
- 주식 가격
- BOJ
- 5525
- 2018 KAKAO BLIND RECRUITMENT
- 구간 합 구하기 4
- js
- codeSyntaxHighlight
- 다이내믹 프로그래밍
- 브루트포스 알고리즘
- 숫자 문자열과 영단어
- 옵셔널 체이닝 연산자
- mermaid js
- javascript
- C++
- 없는 숫자 더하기
- 프로그래머스
- 이분탐색
- react
- n^2 배열 자르기
- 깊이 우선 탐색
Archives
- Today
- Total
개발하는 kim-hasa
[c++][프로그래머스] 정수 제곱근 판별 본문
https://programmers.co.kr/learn/courses/30/lessons/12934
코딩테스트 연습 - 정수 제곱근 판별
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함
programmers.co.kr
제곱수를 판별하고, 제곱인경우 그 다음 제곱수를 리턴하고 아니면 -1을 리턴합니다.
처음에 곱하기로 풀었으나, time over가 계속 나와서 더하기로 변경했습니다.
간략히 소개하자면 제곱수는 1,4,9,16..... 이런식으로 증가하게 되는데,
이는 1, 1+3, 1+3+5, .... 이런식으로 증가하게 됩니다.
☆ ☆★ ☆☆★
★★ ☆☆★
★★★ (이런식입니다...그림표현이 어렵네요)
1 1+3 1+3+5 ...
#include <string>
#include <vector>
using namespace std;
long long solution(long long n) {
long long answer = -1;
long long sqr = 1; // 제곱근 계산을 위해 증가시킬 변수
long long count = 3; // 제곱계산을 더하기로 하기 위해
while(n >= sqr)
{
if(n == sqr) // 제곱수가 되었다면 다음 제곱수 리턴
{
answer = n + count;
break;
}
else
{
sqr += count; // 다음 제곱수로
count += 2;
}
}
return answer;
}
'Algorithm > Programmers(c++)' 카테고리의 다른 글
[c++][프로그래머스] 짝수와 홀수 (0) | 2021.08.05 |
---|---|
[c++][프로그래머스] 제일 작은 수 제거하기 (0) | 2021.08.05 |
[c++][프로그래머스] 정수 내림차순으로 배치하기 (0) | 2021.08.05 |
[c++][프로그래머스] 자연수 뒤집어 배열로 만들기 (0) | 2021.08.04 |
[c++][프로그래머스] 자릿수 더하기 (0) | 2021.08.04 |