ソートと検索 (query)

クエリメニュー【要素の追加・要素の検索・要素の削除・連想配列・ソートと検索】

【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);  // AK 番目の要素を 0 個削除して Q を追加
   A.forEach(a => {
      console.log(a);
   });
});
hogeちゃんの画像

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');  // AK は含まれる? trueなら 'YES' false なら 'NO'
});
hogeちゃんの画像

A.includes(K) で 配列 AK が含まれているかどうかの 真偽値 が取得できました。

【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');
   }
});
hogeちゃんの画像

ループしながら A.includes(K)で 配列 AK が含まれているかどうかの 真偽値 を取得。

 

【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);
   });
});
hogeちゃんの画像
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;
      }
   }
});
hogeちゃんの画像

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));  // IDkey とペアになっている値を出力
  }
});
hogeちゃんの画像

マップ 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]));  // IDS[1](キー) とペアになっている値を 出力
            break;
      }
   }
});
hogeちゃんの画像

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);  // AX, P を 追加
   A.sort((s, b) => s - b);
   console.log(A.indexOf(P) + 1);  // AX, P を 追加
});
hogeちゃんの画像

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);  // AP を追加
  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]);  // AS[1] を追加
         break;
      case 'sorting':  // S[0] が "sorting" なら…
         A.sort((s, b) => s - b);  // A を昇順で並替え
         console.log(A.indexOf(P) + 1);  // A に含まれる P の 添字 + 1 を出力
      break;
    }
  }
});
hogeちゃんの画像

イベントが 2 種類 発生するので switch文 で処理を振り分け。

コメント