第45回【JavaScript】辞書順に出力 3、【文字列の配列】辞書順に出力 Boss

現在取り組んでいるのは、paiza ラーニング問題集「配列メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

JavaScript をゼロから勉強してみよう、のコーナー 45 回目です。

専門は AWS なのですが、Azure に関する問い合わせまで LeoSaki(旦那)に回ってきます。別に Azure を専門にしているメンバーがいるのに。まぁ、あまり Azure に浸かるつもりはないので、スルーパスです。AWS ならああ出来るこう出来るって思いながら。

それでは、今日も頑張ってみようと思います。

辞書順に出力 3 (paizaランク D 相当)

1 行目に整数 N が与えられます。
2 行目に N 個の文字列 s_1, s_2, …, s_N が半角スペース区切りで与えられます。
N 個の文字列を辞書順に並べ替え、改行区切りで出力してください。


入力される値

N
s_1 s_2 ... s_N

1 行目に整数 N が与えられます。
2 行目に N 個の文字列 s_1, s_2, …, s_N が半角スペース区切りで与えられます。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

N 個の文字列を辞書順に並べ替え、改行区切りで出力してください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

* N は 1 以上 5 以下の整数
* s_i (1 ≤ i ≤ N) は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列


入力例

3
b c a

出力例

a
b
c

前回やったのとそんなに変わらない。簡単。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const n = Number(lines[0]);
  const L = lines[1].split(/\s/);
  L.sort();
  for (let i = 0; i < n; i++) {
      console.log(L[i]);
  }
});
Python
N = int(input())
L = input().split()
L.sort()
for li in L:
    print(li)

【文字列の配列】辞書順に出力 Boss (paizaランク D 相当)

1 行目に整数 N, K が与えられます。
2 行目に N 個の文字列 s_1, s_2, …, s_N が半角スペース区切りで与えられます。
N 個の文字列を辞書順に並べ替え、K 番目の文字列を出力してください。


入力される値

N K
s_1 s_2 ... s_N

1 行目に整数 N, K が与えられます。
2 行目に N 個の文字列 s_1, s_2, …, s_N が半角スペース区切りで与えられます。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

N 個の文字列を辞書順に並べ替え、K 番目の文字列を出力してください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

* N は 1 以上 5 以下の整数
* K は 1 以上 N 以下の整数
* s_i (1 ≤ i ≤ N) は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列


入力例

5 2
e d c b a

出力例

b

ちょっとだけ応用問題。Boss らしい問題だ。まぁ、ここまでやってきたことを振り返ると簡単に解ける。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const [n,k] = lines[0].split(/\s/).map(Number);
  const L = lines[1].split(/\s/);
  L.sort();
  console.log(L[k-1]);
});
Python
N,K = map(int,input().split())
L = input().split()
L.sort()
print(L[K-1])

最後に

JavaScript での変数の宣言は、基本的に const で。値が変わるときは let で。var は基本的に使わないようにする。というのが現在の主流のよう。いろいろ調べていると、まだまだ var を使っているコードが多いです。

sort() で書き換わるから、let でないとダメなんじゃないか、と思っていましたが、オブジェクト内のキーや値が変更されることは再代入にならない、らしいです。なるほどなるほど。

引き続き、よろしくお願いいたします!

Python の第45回はこちら