class Solution {
public int[] solution(int n, long left, long right) {
int[] arr = divideCube(n, makeCube(n));
int[] answer = new int[(int) (right - left + 1)];
int breakpoint = (int) (right - left);
for (int i = 0; i <= breakpoint; i++) {
answer[i] = arr[(int) left++];
}
return answer;
}
public int[][] makeCube(int n) {
int[][] cube = new int[n][n];
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(i == 0 && j == 0) {
cube[i][j] = 1;
} else if(i == j) {
cube[i][j] = i + 1;
} else {
cube[i][j] = i > j ? i + 1 : j + 1;
}
}
}
return cube;
}
public int[] divideCube(int n, int[][] cube) {
int[] result = new int[n * n];
int iter = 0;
int i = 0;
while(iter < n * n) {
for(int j = 0; j < n; j++) {
result[iter++] = cube[i][j];
}
i++;
}
return result;
}
}
✔️ 2차 코드 (성공)
left / n 으로 x좌표를 구하고 left % n 으로 y좌표를 구한 후 규칙성을 천천히 살펴보니 규칙이 있었다!!!!
그렇게 left~right만 뽑아내서 구하는 코드로 다시 갈아엎었다...
class Solution {
public int[] solution(int n, long left, long right) {
int[] answer = new int[(int) (right - left + 1)];
for(int i = 0; left <= right; left++) {
int x = (int) (left / (long) n);
int y = (int) (left % (long) n);
int max = x > y ? x : y;
if(x == 0 || y == 0 || x == y) {
answer[i++] = max + 1;
} else if(x == n - 1 || y == n - 1) {
answer[i++] = n;
} else {
answer[i++] = x + y > max + 1 ? max + 1 : x + y;
}
}
return answer;
}
}