プログラマーSweekleyが疲労度に挑戦
質問する
88/100
30分
意図
k最小必要疲労度が大きい
消費疲労度でkを減算する場合,値が0より大きいと探検が可能となるため,コードを記述した.
他人の解答
dfsのような探索を利用したようです.
for文で各配列の値から開始します.
(アレイ長)の条件下では、kの最小需要疲労度はより大きく、未アクセスの場所であればアクセスが適用される.
新しいdfsを用いて減少したk値.
このときcntは成功したので,新しいdfsパラメータとして を追加した.は、ブンハンサイクルが終了した後、再開しなければならない.
アクセスはすべてゼロにし直し、最初から開始します. 例
3のお金を受け取ります.
1アクセスベース.
最初のシナリオと
2番目のシナリオと
先にアクセスする3番目の配列に分けられます.
その他のチームメンバーの回答
可能なすべてのシーケンスを見つけます.
この扉を通って
88/100
30分
意図
["최소 필요 피로도", "소모 피로도"]
大きなスタートから並べ替えた後k最小必要疲労度が大きい
消費疲労度でkを減算する場合,値が0より大きいと探検が可能となるため,コードを記述した.
function solution(k, dungeons) {
var answer = 0;
dungeons.sort((a,b)=>{
let bb = b[0]-b[1], aa=a[0]-a[1]
if(bb !== aa)
return bb - aa
if(b[0]!==a[0])
return b[0]-a[0]})
dungeons.forEach(arr=>{
if(arr[0] <= k && k-arr[1] >=0 ){
k=k-arr[1]
answer++;
}
})
return answer;
}
いくつかの面で失敗した.△例外はまだ分かりません.他人の解答
dfsのような探索を利用したようです.
function solution(k, d) {
const N = d.length
const visited = new Array(N).fill(0)
let ans = 0
function dfs(k, cnt){
ans = Math.max(cnt, ans)
for (let j = 0; j < N; j++){
if (k >= d[j][0] && !visited[j]){
visited[j] = 1
dfs(k - d[j][1], cnt + 1)
visited[j] = 0
}
}
}
dfs(k, 0)
return ans;
}
dfsという名前の関数を作成し、内部で作成します.for文で各配列の値から開始します.
(アレイ長)
新しいdfsを用いて減少したk値.
このときcntは成功したので,新しいdfsパラメータとして
アクセスはすべてゼロにし直し、最初から開始します.
30, [[10, 10], [10, 10], [10, 10]]
のパラメータが受信された場合3のお金を受け取ります.
function solution(k, d) {
const N = d.length
const visited = new Array(N).fill(0)
let ans = 0
function dfs(k, cnt){
ans = Math.max(cnt, ans)
for (let j = 0; j < N; j++){
if (k >= d[j][0] && !visited[j]){
visited[j] = 1
console.log(visited)
dfs(k - d[j][1], cnt + 1)
visited[j] = 0
}
}
}
dfs(k, 0)
return ans;
}
このようなコンソールログ#ログ#[ 1, 0, 0 ]
[ 1, 1, 0 ]
[ 1, 1, 1 ]
[ 1, 0, 1 ]
[ 1, 1, 1 ]
[ 0, 1, 0 ]
[ 1, 1, 0 ]
[ 1, 1, 1 ]
[ 0, 1, 1 ]
[ 1, 1, 1 ]
[ 0, 0, 1 ]
[ 1, 0, 1 ]
[ 1, 1, 1 ]
[ 0, 1, 1 ]
[ 1, 1, 1 ]
このように区別すると、このように区別されます.1アクセスベース.
最初のシナリオと
2番目のシナリオと
先にアクセスする3番目の配列に分けられます.
その他のチームメンバーの回答
const getPermutations= function (target, num) {
const results = [];
if (num === 1) {
return target.map((value) => [value]);
}
target.forEach((fixed, index, origin) => {
const rest = [...origin.slice(0, index), ...origin.slice(index + 1)];
const permutations = getPermutations(rest, num - 1);
const attached = permutations.map((permutation) => [fixed, ...permutation]);
results.push(...attached);
});
return results;
};
function solution(k, dungeons) {
let maxVisitedDungeons = 0;
const permutations = getPermutations(dungeons, dungeons.length);
for (const permutation of permutations) {
let currentTired = k;
let visitedDungeons = 0;
for (const [neededTired, useTired] of permutation) {
// neededTired는 useTired보다는 무조건 크니까
// currentTired와 useTired를 비교할 필요는 없지
// currentTired > neededTired > useTired
if (currentTired < neededTired) {
continue;
}
currentTired -= useTired
visitedDungeons += 1
}
maxVisitedDungeons = Math.max(visitedDungeons, maxVisitedDungeons)
}
return maxVisitedDungeons;
}
可読性は確かによい.可能なすべてのシーケンスを見つけます.
この扉を通って
Reference
この問題について(プログラマーSweekleyが疲労度に挑戦), 我々は、より多くの情報をここで見つけました https://velog.io/@khw970421/프로그래머스-위클리챌린지-피로도テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol