クエリメニュー【要素の追加・要素の検索・要素の削除・連想配列・ソートと検索】
【STEP: 1】コード
reader.on('close', () => {
const [N, K, Q] = lines[0].split(' ').map(Number);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(lines[i]);
}
A.splice(K, 0, Q); // A の K 番目の要素を 0 個削除して Q を追加
A.forEach(a => {
console.log(a);
});
});
A.splice(追加・削除を行う位置, 削除する要素数, 追加する値)。
【STEP: 2】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
console.log(A.includes(K) ? 'YES' : 'NO'); // A に K は含まれる? trueなら 'YES' false なら 'NO'
});
A.includes(K)
で 配列 A に K が含まれているかどうかの 真偽値 が取得できました。
【STEP: 3】コード
reader.on('close', () => {
const [N, Q] = lines[0].split(' ').map(Number);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
for (let i = N + 1; i <= N + Q; i++) {
const K = Number(lines[i]);
console.log(A.includes(K) ? 'YES' : 'NO');
}
});
ループしながら A.includes(K)
で 配列 A に K が含まれているかどうかの 真偽値 を取得。
【STEP: 4】コード
reader.on('close', () => {
const N = Number(lines[0]);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
A.shift(); // 先頭の要素を削除
A.forEach(a => {
console.log(a);
});
});
A.shift()で配列 A の先頭の要素を削除しています。
【STEP: 5】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
for (let i = N + 1; i <= N + K; i++) {
const S = lines[i];
switch (S) {
case 'pop': // S が "pop" なら…
A.shift(); // 先頭の要素を削除
break;
case 'show': // S が "show" なら…
A.forEach(a => {
console.log(a); // A の各要素を出力
});
break;
}
}
});
switch文 で処理を振り分けて ″pop″であれば A.shift()
を実行。″show″であれば A の各要素を出力しています。
【STEP: 6】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const ID = new Map(); // マップ ID を宣言
for (let i = 1; i <= N; i++) {
const [num, id] = lines[i].split(' ');
ID.set(num, id); // ID に 要素 {num(キー), id(値)} を保存
}
for (let i = N + 1; i <= K + N; i++) {
const key = lines[i];
console.log(ID.get(key)); // ID の key とペアになっている値を出力
}
});
マップ ID を宣言し ID.set(num, id)
で num = キー, id = 値 をペアで保存。 ID.get(key)
で入力された key とペアになった値を取得。
【STEP: 7】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const ID = new Map(); // マップ ID を宣言
for (let i = 1; i <= N; i++) {
const [num, id] = lines[i].split(' ');
ID.set(num, id); // ID に 要素 {num(キー), id(値)} を保存
}
for (let i = N + 1; i <= K + N; i++) {
const S = lines[i].split(' ');
switch (S[0]) {
case 'join': // S[0] が "join" なら…
ID.set(S[1], S[2]); // ID に 要素 {S[1](キー), S[2](値)} を追加
break;
case 'leave': // S[0] が "leave" なら…
ID.delete(S[1]); // ID から S[1](キー) とペアになっている要素を を削除
break;
case 'call': // S[0] が "call" なら…
console.log(ID.get(S[1])); // ID の S[1](キー) とペアになっている値を 出力
break;
}
}
});
switch文 で処理内容を振り分けて ID に 要素 ({S[1](キー), S・[2](値)} )を追加したり・要素の削除・出力を実行しています。
【STEP: 8】コード
reader.on('close', () => {
const [N, X, P] = lines[0].split(' ').map(Number);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i])); // A に クラスの身長を保存
}
A.push(X, P); // A に X, P を 追加
A.sort((s, b) => s - b);
console.log(A.indexOf(P) + 1); // A に X, P を 追加
});
A.indexOf(P)
で 配列 A に含まれる P の index が取得できました。
【FINAL】コード
reader.on('close', () => {
const [N, K, P] = lines[0].split(' ').map(Number);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i])); // A に クラスの身長を保存
}
A.push(P); // A に P を追加
for (let i = N + 1; i <= K + N; i++) {
const S = lines[i].split(' ');
switch (S[0]) {
case 'join': // S[0] が "join" なら…
A.push(S[1]); // A に S[1] を追加
break;
case 'sorting': // S[0] が "sorting" なら…
A.sort((s, b) => s - b); // A を昇順で並替え
console.log(A.indexOf(P) + 1); // A に含まれる P の 添字 + 1 を出力
break;
}
}
});
イベントが 2 種類 発生するので switch文 で処理を振り分け。
コメント