https://school.programmers.co.kr/learn/courses/30/lessons/87390
import java.util.*;
import static java.lang.Math.*;
class Solution {
public int[] solution(int n, long left, long right) {
int[] answer = {};
LinkedList<Long> ll = new LinkedList<>();
for(long i = left; i <= right; i++){
long temp;
long tempA = i / n;
long tempB = i % n;
long tempC = 0;
tempC = max(tempA, tempB);
temp = tempC + 1;
ll.add(temp);
}
int[] arr = new int[ll.size()];
for(int i = 0; i < ll.size(); i++) arr[i] = ll.get(i).intValue();
return arr;
}
}
날것그대로의 코드.
핵심 규칙인 max(i / n, i % n) + 1 을 깨닫는데 참으로 오래걸렸다.
하지만 스스로 깨달았다는것에 만족스럽다. 그 과정역시 오래걸렸을지언정 매끈한 편이었고.

속도는 역겨울 정도로 느리다.
import java.util.ArrayList;
import java.util.List;
public class Solution {
public List<Integer> solution(int n, long left, long right) {
List<Integer> answer = new ArrayList<>();
for (long i = left; i <= right; i++) {
int row = (int) (i / n);
int col = (int) (i % n);
answer.add(Math.max(row, col) + 1);
}
return answer;
}
}
GPT 의 답안과 비교해보자.
굉장히 정석적인 답처럼 보이지만 반환값이 List 로 기존의 int[] 형이 아니다. 즉 자신이 조작했다는 것.

For 문으로 다시 돌면서 배열을 만들필요가 없으므로 그 시간이 단축되고 상당한 효과를 얻는다.
import java.util.*;
import static java.lang.Math.*;
class Solution {
public LinkedList<Long> solution(int n, long left, long right) {
LinkedList<Long> ll = new LinkedList<>();
for(long i = left; i <= right; i++){
long temp;
long tempA = i / n;
long tempB = i % n;
long tempC = 0;
tempC = max(tempA, tempB);
temp = tempC + 1;
ll.add(temp);
}
return ll;
}
}

내 코드 역시 반환값을 조작했을 때 상당한 속도의 상승을 얻을수있었다.
예전까지는 반환값을 직접 조작하는것에 부정적이었는데 이 정도 속도차이면 해야겠다...