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?

今回は paiza の「税込み価格」の問題に挑戦!


問題概要

何をする問題?

  • 商品ごとに税率が異なるため、税込み価格を計算して値札を作る問題

入力

  • 1行目
    • 整数 N
    • 意味:商品の個数(1 ≦ N ≦ 100)
  • 2行目以降(N 行)
    • 各行に以下の2つが空白区切りで与えられる: T_i P_i
    • T_i:税率区分
      • 0 → 税率 10%
      • 1 → 税率 8%
    • P_i:商品の税抜き価格
      • 1 ≦ P_i ≦ 10000

計算ルール

  • 商品 i について:
    • T_i === 0 の場合
      P_i × 1.1
    • T_i === 1 の場合
      P_i × 1.08
  • 小数点以下は切り捨て

出力

  • N 行出力
  • i 行目には i 番目の商品の税込み価格を出力
  • 各結果は 改行区切り



入力例:

4
0 800
1 100
1 200
0 400

出力例:

880
108
216
440






✅OK例:

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

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

rl.on('close', () => {
    const N = Number(lines[0])
    const tp = lines.slice(1).map(tp => tp.split(' ').map(Number));
    
    for (let i = 0; i < N; i++) {
        const [t, p] = tp[i];
        
        if (t === 0) {
            console.log(Math.floor(p * 1.1));
        } else {
            console.log(Math.floor(p * 1.08));
        }
    }
});

🔍コードの流れ

  • readline を使って 標準入力を1行ずつ受け取る準備をする
  • 入力された各行を lines 配列に 順番に保存する
  • 入力がすべて終わったら(close が呼ばれたら)処理開始
  • lines[0] から 商品数 N を取得する
  • lines[1] 以降を
    • "税率区分 価格" の形で分割
    • 数値に変換して配列にする
  • for ループで 商品を1つずつ処理
  • 税率区分が
    • 0 → 価格 × 1.1
    • 1 → 価格 × 1.08
  • 計算結果を Math.floor で 小数点以下切り捨て
  • 各商品の 税込み価格を1行ずつ出力




✨少しスッキリさせる

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

rl.on('line', line => lines.push(line));
rl.on('close', () => {
  const N = Number(lines[0]);
  const tax = [1.1, 1.08];

  for (let i = 1; i <= N; i++) {
    const [t, p] = lines[i].split(' ').map(Number);
    console.log(Math.floor(p * tax[t]));
  }
});

ポイント

  • tax[t]
    t === 0 ? 1.1 : 1.08 を 1行で表現
  • lines.slice(1) を使わない
    → 余計な配列を作らない分、処理も見た目も軽い
  • ループの i が 入力行番号と一致
    → paizaの入力形式と対応が分かりやすい






📝まとめ

処理の流れ

  • 入力をすべて読み込む
  • 最初の行から N を取得
  • 残りの行を1行ずつ処理
  • 各行で
    • 税率区分と価格を取り出す
    • 税率を判定
    • 税込み価格を計算
    • 切り捨てて出力

✨実装テクニック

  • tax[t] のように、条件分岐を配列で簡潔に書ける
  • lines[i] をそのまま処理 → 余計な配列を作らずに書ける
  • ループのインデックスと入力行を一致させる → バグりにくく、読みやすい
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?