우선 n 이 3일 때 위와 같은 숫자 블록을 가질 수 있다. 이를 행열을 통해 나타내 보자고 생각했다. 쉽게 말해 x,y 좌표를 생각하면 된다.
가장 우측 제일 상단의 3의 값을 보면 이는 x 는 2 이고, y 는 0 이다.
이는 2번째 값이며 3이고 x:2, y:0 이라고 생각할 수 있다. 유심히 보면 규칙을 찾을 수 있다. i번째의 값을 기준으로 x 좌표 는 i 를 n 으로 나눈 나머지 값이고, y 좌표는 몫이다. 또한 해당 좌표의 값은 Math.max(i/n, i%n) + 1 이라는 규칙을 찾아낼 수 있다. 규칙을 찾았다면 이를 로직으로 구현하는 것은 어렵지 않다. 주의할 것은 Long 값을 int 로 변환하는 정도. 필자는 stream 을 사용해서 풀이했다.
✅ 전체코드
import java.util.*;
import java.util.stream.*;
public class Solution {
public static void main(String[] args) {
int n = 3;
long left = 2;
long right = 5;
int[] answer = solution(n,left,right);
System.out.println(answer);
}
public static int[] solution(int n, long left, long right) {
List<Long> list = new ArrayList<>();
for(long i=left; i <=right; i++) {
list.add(Math.max(i/n,i%n) + 1);
}
// Long을 int로 변환
return list.stream()
.mapToInt(Long::intValue)
.toArray();
}
}