n의 범위가 10^7미만, left와 right는 n^2미만
➡️ 배열에 직접 저장 ❌
➡️ 규칙 찾아야 함
2차원 배열로 구현했을 경우 아래와 같은 규칙을 가짐
0 1 2 3
0 1 2 3 4
1 2 2 3 4
2 3 3 3 4
3 4 4 4 4
-> arr[i][j] = max(i, j) + 1
-> arr[0][2] = max(0, 2) + 1 = 3
i = left / n
, j = left % n
import java.util.Arrays;
public class ArrayN2 {
public int[] solution(int n, long left, long right) {
int[] result = new int[(int)(right - left + 1)];
int idx = 0;
while (left <= right) {
result[idx++] = (int) Math.max(left / n, left % n) + 1;
left++;
}
return result;
}
public static void main(String[] args) {
ArrayN2 arrayN2 = new ArrayN2();
System.out.println(Arrays.toString(arrayN2.solution(4, 7, 14))); // [4,3,3,3,4,4,4,4]
}
}