https://school.programmers.co.kr/learn/courses/30/lessons/12949
단순 구현
문제를 이해하기 위해서 단순하게 몇 개를 만들어보자.
1. 단순하게 생각해보기
위의 그림처럼 모든 배열을 만들고 원하는 범위를 잘라서 반환하는 방식을 생각해보자.
제한 조건을 봤을때, n의 범위가 10^7이므로, 모두 생성해서 잘라내기에는 부담스럽다.
2. 규칙을 찾아보기
규칙에 따라 생성하고 변환된 배열을 한번 살펴보자.
1
12 22
123 223 333
1234 2234 3334 4444
12345 22345 33345 44445 55555
123456 223456 333456 444456 555556 666666
무언가 규칙이 있는것을 알 수 있다.
내가 찾고자 하는 index에 해당 하는 수를 몫과 나머지를 통해서 바로 구할 수 있다.
해당 방식으로 진행해보자.
주의할 점
left와 right의 범위는 int형의 범위 밖이다.
type casting에 주의하자.
class Solution {
public int[] solution(int n, long left, long right) {
int diff = (int)(right - left);
int[] answer = new int[diff + 1];
for(int k = 0; k <= diff; ++k){
int quotient = (int)((k + left) / n);
int remainder = (int)((k + left) % n);
if(quotient >= remainder)
answer[k] = quotient + 1;
else
answer[k] = remainder + 1;
}
return answer;
}
}