0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「値の計算」を解くために:part2

Posted at

今回は paiza の「「値の計算」を解くために:part2」の問題に挑戦!


問題概要

  • 入力
    • 1行目に整数 N(抵抗の種類数)。
    • 続く N 行に、抵抗名 s_i(アルファベット1文字)と抵抗値 w_i(整数)。
    • 処理内容
      • 抵抗名をキー、抵抗値をバリューとした連想配列(Map / オブジェクト)を作る。
      • 抵抗名を アルファベット順にソート する。
      • その順番で抵抗値を出力する。
  • 出力
    • アルファベット順に並べた抵抗値を1つずつ改行して出力。



入力例:

2
A 100
B 200

出力例:

100
200






✅OK例:

const rl = require('readline').createInterface({ input:process.stdin });

const lines = [];

rl.on('line', (input) => lines.push(input));

rl.on('close', () => {
    const N = Number(lines[0]);
    const sw = new Map(lines.slice(1).map(line => {
        const [s, w] = line.split(' ');
        return [s, Number(w)];
    }));
    
    const swSorted = [...sw.keys()].sort();
    swSorted.forEach(key => console.log(sw.get(key)));
});
  • lines[0] には最初の行の「抵抗の種類数」が入っているので数値に変換して N に格納。
  • lines.slice(1) で2行目以降を取得 → 抵抗名と抵抗値のペアが並ぶ。
  • map[s, Number(w)] 形式の配列を返す → [ "A", 100 ] のようになる。
  • new Map([…]) とすると、抵抗名をキー、抵抗値をバリューとする連想配列(Map オブジェクト)が作られる。
  • sw.keys()Map に入っているキー(抵抗名)を取り出す。
  • […sw.keys()] で配列化 → ["A", "B"] のようになる。
  • .sort() でアルファベット順にソート。
  • ソート済みのキーを順に取り出し、sw.get(key) で値(抵抗値)を取得して出力。
  • 結果はアルファベット順の抵抗値だけが出力される。




✅OK例:オブジェクト版

const rl = require('readline').createInterface({ input:process.stdin });

const lines = [];
rl.on('line', (input) => lines.push(input));

rl.on('close', () => {
    const N = Number(lines[0]);

    // オブジェクトに格納
    const sw = {};
    for (let i = 1; i <= N; i++) {
        const [s, w] = lines[i].split(' ');
        sw[s] = Number(w);
    }

    // キーをアルファベット順にソート
    const swSorted = Object.keys(sw).sort();

    // 値を順に出力
    swSorted.forEach(key => console.log(sw[key]));
});
  • ブラケット記法 (sw[s])で、動的にプロパティを追加、つまり、入力された抵抗名をそのままキーとして動的に格納している。
  • Object.keys(sw) → オブジェクト sw の キー(プロパティ名)の配列 を取得
  • あとは、1つ目のコードと同じで、ソートして、値を順に出力する。






📝まとめ

連想配列の作り方

  • Map を使う → new Map([[key, value], ...])
  • オブジェクトを使う → obj[key] = value(ブラケット記法で動的に追加)

キーの取得

  • Map → sw.keys() でキーをイテレータ取得、[...sw.keys()] で配列化
  • オブジェクト → Object.keys(obj) で配列を取得

ソート

  • .sort() は文字列として昇順ソートされる → 今回はアルファベット順になる

値の参照

  • Map → map.get(key)
  • オブジェクト → obj[key]




僕の失敗談(´;ω;`)と解決法🐈

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?