CodeIQ MAGAZINECodeIQ MAGAZINE

【息抜き】右位置揃え【言語不問】解答と解説

2017.07.03 Category:CodeIQ問題解説・リーダーボード Tag:

  • 2
  • このエントリーをはてなブックマークに追加

息抜き時間でできる、簡単なプログラム。

あなたは見事、プログラムを書けましたか? というわけで、出題者の柳井さんによる解答と解説をどうぞ!
by CodeIQ運営事務局

【息抜き】右位置揃え【言語不問】

本問題は、表題のテーマで、簡単なプログラムを書くものです。

それでは以下、問題とその解答を見ていきましょう。

問題

改行区切りの文字列の各行は、半角数字のみの整数(最大桁数32)になっています。

この各行の先頭に任意の数の半角のアンダーバー(_)を挿入して、右揃えになるように加工して下さい。

ただし、最も桁数が多い数値の先頭には、半角のアンダーバーを挿入しないものとします。

(参考:各プログラミング言語の標準入出力サンプル

// 入力例
1
23
45678
9
10
// 出力例
____1
___23
45678
____9
___10

答え

この問題は、以下の手順で処理を行なう必要があります。

  1. 各行の文字列長を調べて、最大の文字列長を得る。
  2. 各行の文字列が、最大の文字列長より短ければ、足りない文字数分の「_」を、文字列の先頭に追加する。

初めに全ての行の文字列長を調べなければ、最大の文字列長は分かりません。そのため、2回各行に対して処理を行なう必要があります。

そのことが分かれば、この問題は解けます。

以下、問題の入力と出力です。

入力1

出力1

入力2

出力2

以下、解答例を示します。サンドボックスで実行してください。

// https://codeiq.jp/tools/sandbox/
// Java (7/8)

import java.util.*;

class Main{
    public static void main(String[] args) {
        // 変数の初期化
        Scanner cin = new Scanner(System.in);
        List<String> list = new ArrayList<>();
        String line;
        int lenMax = 0;

        // 最大の文字列長を求める、配列への格納
        for(;cin.hasNext();) {
            line = cin.nextLine();
            if (line.length() > lenMax) lenMax = line.length();
            list.add(line);
        }

        // 先頭に_を追加
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            line = iterator.next();
            int len = lenMax - line.length();
            for (int i = 0; i < len; i ++) {
                line = "_" + line;
            }
            System.out.println(line);
        }
    }
}
// Node.js

process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function (chunk) {
    var lines = chunk.toString().split('\n');

    // 最大桁数を決定
    var max = 0;
    lines.forEach(function(line) {
        if (line.length > max) {max = line.length}
    });

    // 右寄せで出力
    lines.forEach(function(line) {
        var s = new Array(max + 1).join('_') + line;
        s = s.substr(- max);
        console.log(s);
    });
});

CodeIQ運営事務局より

柳井さん、ありがとうございました!
現在、柳井さんの最新問題が出題中です。
ぜひ挑戦してみてくださいね!

  • 2
  • このエントリーをはてなブックマークに追加

■関連記事

【謎解きプログラム】どう防ぐ?【無限ループ】解答と解説... 【謎解きプログラム】どう防ぐ?【無限ループ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間以内に謎...
数学の問題をプログラミングで解こう!「タワー・ビルディング」問題解説... 問題のおさらい A を一辺が 1 の立方体のブロックとし、B を縦が 1、横が 1、高さが 2 の直方体のブロックとします。 (下は横から見た図です。) 自然数 n, a, b に対し、A を最大 a 個、B を最大 b 個使って、縦が 1、横が 1、高さが n の直方体の塔を作ります。 こ...
【謎解きプログラム】正しいコードは?【一人すごろく】解答と解説... 【謎解きプログラム】正しいコードは?【一人すごろく】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間...
数学の問題をプログラミングで解こう!「ペア・ドロップ」問題解説... 問題のおさらい n を自然数とします。1 から n までの自然数が 1 つずつ書かれた n 枚のカードが 2 組あります。 これら 2n 枚のカードをよく混ぜ、A と B の 2 人に n 枚ずつ配ります。 A と B は、それぞれ自分の持ち札の中に番号が一致するカードがあればその 2 枚を捨...
【謎解きプログラム】中身はどうなる?【出し入れ】解答と解説... 【謎解きプログラム】中身はどうなる?【出し入れ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間以内...
【謎解きプログラム】座標の移動【Matrix】解答と解説... 【謎解きプログラム】座標の移動【Matrix】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間以内に...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

CodeIQ(コードアイキュー)とは、自分の実力を知りたいITエンジニア向けの、実務スキル評価サービスです。

CodeIQご利用にあたって
関連サイト
codeiq

リクルートグループサイトへ