[HackerRank] Sherlock and Squares

아르당·2023년 11월 16일
0

HackerRank

목록 보기
21/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

문제

왓슨은 셜록의 수학 능력에 도전하는 것을 좋아한다. 그는 시작 값과 끝 값을 주고, 이 값들을 포함한 정수형 범위이다. 셜록은 주어진 범위 내에서 제곱수의 갯수를 찾아야 한다.

Example

a = 24
b = 49

범위 내에 25, 36, 49 3개의 제곱수가 있다. 그래서 3을 반환한다.

Function

squares 함수를 완성해라. a와 b를 포함한 범위 내에 있는 제곱수의 개수를 반환해야 한다.
squares 함수는 아래와 같은 매개변수를 가지고 있다.

  • int a: 범위의 최소값
  • int b: 범위의 최대값

Return

  • int: 범위 내의 제곱수의 갯수

Constraints

  • 1 <= q <= 100
  • 1 <= a <= b <= 10^9

풀이

Math.sqrt()를 사용해서 제곱근부터 구했다. 1부터 반복문을 시작하려고 했지만 최소 범위가 주어지기 때문에 비효율적이라고 생각했다.

먼저 start, end, 제곱수의 갯수를 담을 count 변수를 선언한다. start와 end는 Math.sqrt를 사용해서 시작 값과 끝 값을 할당한다.

int start = (int) Math.sqrt((double) a);
int end = (int) Math.sqrt((double) b);
int count = 0;

start와 end를 이용해서 반복문을 사용한다. 반복문 안에 조건문을 통해 제곱수의 갯수를 증가시킨다.

for(int i = start; i <= end; i++){
	if(i * i >= a && i * i <= b){    // a값과 b값이 포함되어야 한다. 
		count++;
	}
}

count를 반환한다.

return count;

전체 코드

public static int squares(int a, int b) {
	int start = (int) Math.sqrt((double) a);
	int end = (int) Math.sqrt((double) b);
	int count = 0;

	for(int i = start; i <= end; i++){
		if(i * i >= a && i * i <= b){
			count++;
		}
	}

	return count;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글