정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.
정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요.
n | left | right | result |
---|---|---|---|
3 | 2 | 5 | [3,2,2,3] |
4 | 7 | 14 | [4,3,3,3,4,4,4,4] |
배열을 만드는 패턴이 1차원 배열처럼 나열했을때 원소의 패턴은
1, 2, 3 ... n / 2, 2, 3 ... n / 3, 3, 3, 4 ... n /...
이렇게 진행하게 된다.
처음 원소들의 패턴이 k번째 행일때 k가 k번 출력되고 다음에 n까지 증가하면서 채워진다.
left 에서부터 right까지 원소를 계산하여 각 원소를 arr에 채운다.
startRow,endRow 로 순회할 행을 구해준다.
startIdx는 반복시 몇 번째 원소부터 시작하는지 구한다.
startRow 행이 아니라면 인덱스 0부터 시작할것이고 startRow일때는 left % n
인덱스부터 시작할 것이다.
endRow도 비슷한 이치로 구할 수 있다.
arr에 원소를 채울 때 현재 열 j가 i보다 작을 시 i+1 값을 아닐시 j+1값을 준다.
class Solution {
public int[] solution(int n, long left, long right) {
int[] answer = {};
int answerLength = (int) right + 1 - (int) left;
int[] arr = new int[answerLength];
int idx = 0;
int startRow = (int) (left / n);
int endRow = (int) (right / n);
for (int i = startRow; i <= endRow; i++) {
int startIdx = startRow < i ? 0 : (int) (left % n);
int endIdx = endRow == i ? (int) (right % n) + 1 : n;
for (int j = startIdx; j < endIdx; j++) {
arr[idx++] = j < i ? i + 1 : j + 1;
}
}
answer = arr;
return answer;
}
}