解題-n^2クリップ配列


https://programmers.co.kr/learn/courses/30/lessons/87390

n^2クリップスキーム


問題の説明
整数n,左,右.1 Dアレイを作成するには、次の手順に従います.
n行n列サイズの2次元空配列.
i = 1, 2, 3, ..., nの場合、次の手順を繰り返します.
1行1列からi行i列までの領域のすべてのスペースを数値iで埋めます.
1行2行...n行が切り取られ、すべて接続された新しい1次元配列を作成します.
新しい1次元配列をarrと呼ぶとarr[left]、arr[left+1]、...、arr[right]のみを残し、残りは削除します.
パラメータは整数n、左、右です.解法関数を完了し、指定したプロシージャに従って作成された1次元配列を返します.
せいげんじょうけん
1 ≤ n ≤ 10^7
0 ≤ left ≤ right < n^2
right - left < 10^5
I/O例
nleftrightresult325[3,2,2,3]4714[4,3,3,3,4,4,4,4]
問題を解く
function solution(n, left, right) {
    var answer = [];
    for (let i = left; i<=right; i++) {
        let a = parseInt(i/n);
        let b = i%n
        if(a<=b) answer.push(b+1)
        else {
            answer.push(a+1)
        }
    }
    return answer;
}
最初は制限に気づかなかったので、2つの繰り返し文を迂回しましたが、テストで問題を発見しました.
コードをより効率的に記述する方法を実現しようとする.
  • の2 Dアレイのルールを理解し、1 Dアレイ
  • にする
  • の一次元配列から必要な左から右の周期
  • を得る.
    まず,一次元配列を実現するために,規則を見つけた.ルールは
    nが4の場合
    1,2,3,4
    2,2,3,4
    3,3,3,4
    4,4,4,4
    n次断裂の法則が見つかった.
    0番目のインデックス(2 D配列)では、1、2、3、4は、1番目のインデックスが2、2、3、4番目のインデックスより前の数字がx番目のインデックスの数字に等しいことを理解します.let a = parseInt(i/n)変数aは2次元配列のインデックスであり、bは2次元配列内のインデックスである.したがって,b番目のインデックスまでa+1,他の数字にb+1を加えると,答えが得られる.