[プログラマレベル2]n^2配列を切り取る
7953 ワード
質問する
https://programmers.co.kr/learn/courses/30/lessons/87390
問題を解く
コード(失敗)
function solution(n, left, right) {
if(n===1) return 1;
let arr=Array.from(Array(n), ()=>Array(n));
for(let i=0; i<n; i++){
for(let j=0; j<i+1; j++){
if(typeof arr[i][j]==='undefined') arr[i][j]=i+1;
if(typeof arr[j][i]==='undefined') arr[j][i]=i+1;
}
}
return arr.flat().slice(left, right+1);
}
「signal:aborted(コアダンプ)」というエラーが発生しました(検索後に致命的なエラーであることがわかりました).理由を探す過程で、0をアレイ要素(Array(n))に入れる.fill(0)でこのようなエラーが発生する可能性があるので、
if(arr[i][j]===0)
を上のアレイが空のコードであるかどうかを確認に変更しますが、だめです...まずこの問題の答えはまだ見つかっていない.質問「質問」に文章が書いてありますので、後で確認しましょう.
この文章を参照すると、nは10^7に入力されるため、問題の順序でn*nが2次元配列を作成した後、1次元配列を作成し、効率テストでは合格できません.(それも、nが10^7であれば、n*nだと効率的に通れないのは当然ですが)エラー情報
core dumped
を検索するとエラー情報が発見されてしまうのは、そのような原因であれば理解できます.コード#コード#
function solution(n, left, right) {
const ans = [];
while (left <= right) {
ans.push(Math.max(Math.floor(left / n), left++ % n) + 1);
}
return ans;
}
にぶんコード参照.どうやってこの法則性を見つけることができるのか...?もし私のコードが答えが見えないならば、それをすべて削除して、新しい規則性を見つけます!
リファレンス
https://blog.naver.com/sangyeung927/100193167051
Reference
この問題について([プログラマレベル2]n^2配列を切り取る), 我々は、より多くの情報をここで見つけました https://velog.io/@rladpwl0512/프로그래머스-level2-n2-배열-자르기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol