[HackerRank] Beautiful Days at the Movies

아르당·2023년 11월 8일
0

HackerRank

목록 보기
13/109
post-thumbnail

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

문제

릴리는 정수를 이용한 게임을 좋아한다. 그녀는 한 숫자와 그것을 뒤집은 숫자의 차이를 이용한 새로운 게임을 만들었다. 예를 들면, 숫자 12가 주어지면 그것을 뒤집은 숫자는 21이다. 이 수의 차이는 9다. 숫자 120을 뒤집으면 21이 되고, 그 차이는 99이다.

그녀는 게임을 결정하는데 사용하기로 했다. 그녀는 연속된 날짜를 보고 아름다운 날에 영화를 볼 것이다.

연속된 날짜[i...j]와 숫자 k가 주어졌을때, 날짜 범위 내에서 아름다운 날을 구하여라. 아름다운 숫자는 i - reeverse(i)의 절대값이 k로 나누어 떨어지는 것으로 정한다. 만약 날짜가 아름다운 숫자이면, 아름다운 날이 된다. 주어진 범위에서 아름다운 날의 수를 구하여라.

Function Description

beautifulDays 함수를 완성해라.
beautifulDays 함수는 아래와 같은 매개변수를 가지고 있다.

  • int i: 시작하는 일자
  • int j: 끝나는 일자
  • int k: 나눗수

Return

  • int: 범위 내의 아름다운 날의 수

Constraints

  • 1 <= i <= j <= 2 * 10^6
  • 1 <= k <= 2* 10^9

풀이

숫자를 뒤집는게 핵심인 문제이다.
먼저 아름다운 수의 갯수를 담을 count 변수를 선언한다.

int count = 0;

반복문을 통해 i에서 j까지 순회한다.
순회할때 해당 값을 StringBuffer로 생성한다. 그 이유는 StringBuffer의 reverse 메서드를 사용하기 위함이다. 그리고 해당 숫자와 뒤집은 숫자를 double로 형변환하고, 계산을 해준다. 계산한 값이 정수형이면 count를 증가시킨다.

for(int a = i; a <= j; a++){
	StringBuffer sb = new StringBuffer(String.valueOf(a));
	double reverse = Double.parseDouble(sb.reverse().toString());
	double temp = Math.abs(((double) a - reverse) / k);

	if(temp == (int) temp){
		count++;
	}
}

마지막으로 count를 반환한다.

return count;

전체 코드

public static int beautifulDays(int i, int j, int k) {
	int count = 0;

	for(int a = i; a <= j; a++){
		StringBuffer sb = new StringBuffer(String.valueOf(a));
		double reverse = Double.parseDouble(sb.reverse().toString());
		double temp = Math.abs(((double) a - reverse) / k);

		if(temp == (int) temp){
			count++;
		}
	}

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

0개의 댓글