[20]10866号デッキ



10866号デッキ


質問する


整数を格納するDequeを実行し、入力としてのコマンドを処理するプログラムを作成します.
命令は全部で8条ある.
  • push frontX:整数Xをインデックスの前に配置します.
  • push backX:整数Xをインデックスの後ろに配置します.
  • pop front:インデックスの一番前の数字を削除し、その数字を出力します.インデックスに整数がない場合は、-1が出力されます.
  • pop back:dexの最後の数字を出力します.インデックスに整数がない場合は、-1が出力されます.
  • size:インデックス内の整数の個数を出力します.
  • 空:インデックスが空の場合、1または0が出力されます.
  • front:インデックスの一番前の整数を出力します.インデックスに整数がない場合は、-1が出力されます.
  • back:インデックスの一番後ろの整数を出力します.インデックスに整数がない場合は、-1が出力されます.
  • 入力


    1行目に与えられるコマンド数N(1≦N≦10000).2行目からN行目までそれぞれ1つのコマンドがあります.与えられた整数は1以上であり、100000以下である.問題にない命令はない.

    しゅつりょく


    出力するコマンドが発行されるたびに、各行に1つのコマンドが出力されます.

    コピー例入力1

    15
    push_back 1
    push_front 2
    front
    back
    size
    empty
    pop_front
    pop_back
    pop_front
    size
    empty
    pop_back
    push_front 3
    empty
    front

    コピー例出力1

    2
    1
    2
    0
    2
    1
    -1
    0
    1
    -1
    0
    3

    コピー例入力2

    22
    front
    back
    pop_front
    pop_back
    push_front 1
    front
    pop_back
    push_back 2
    back
    pop_front
    push_front 10
    push_front 333
    front
    back
    pop_back
    pop_back
    push_back 20
    push_back 1234
    front
    back
    pop_back
    pop_back

    コピーサンプル出力2

    -1
    -1
    -1
    -1
    1
    1
    2
    2
    333
    10
    10
    333
    20
    1234
    1234
    20

    に答える


    コード#コード#

    //---- 세팅 ----//
    const fs = require('fs');
    const stdin = (
      process.platform === 'linux'
        ? fs.readFileSync('/dev/stdin').toString()
        : `\
    15
    push_back 1
    push_front 2
    front
    back
    size
    empty
    pop_front
    pop_back
    pop_front
    size
    empty
    pop_back
    push_front 3
    empty
    front
    `
    ).split('\n');
    
    const input = (() => {
      let line = 0;
      return () => stdin[line++];
    })();
    
    //---- 풀이 -----//
    const t = Number(input());
    const commands = [];
    const arr = [];
    const res = [];
    
    [...Array(t)].map(() => {
      commands.push(input().split(' '));
    });
    
    const commnadFunc = {
      push_front: x => arr.unshift(x),
      push_back: x => arr.push(x),
      pop_front: () => {
        arr.length === 0 ? res.push(-1) : res.push(arr.shift());
      },
      pop_back: () => {
        arr.length === 0 ? res.push(-1) : res.push(arr.pop());
      },
      size: () => res.push(arr.length),
      empty: () => {
        arr.length === 0 ? res.push(1) : res.push(0);
      },
      front: () => {
        arr.length === 0 ? res.push(-1) : res.push(arr[0]);
      },
      back: () => {
        arr.length === 0 ? res.push(-1) : res.push(arr[arr.length - 1]);
      },
    };
    
    commands.forEach(command => {
      commnadFunc[command[0]](command[1]);
    });
    
    console.log(res.join('\n'));
    

    に答える


    インデックスの列分割を行うarr配列を宣言し,命令の動作を関数として集合のcommnadFuncオブジェクトを実現する.
    コマンドで巡回して動作を実行します.