ガジェット通信 GetNews

見たことのないものを見に行こう

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

DATE:
  • ガジェット通信 GetNewsを≫

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

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

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

問題

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

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

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

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

// 入力例
1
23
45678
9
10

// 出力例
____1
___23
45678
____9
___10

答え

この問題は、以下の手順で処理を行なう必要があります。
各行の文字列長を調べて、最大の文字列長を得る。
各行の文字列が、最大の文字列長より短ければ、足りない文字数分の「_」を、文字列の先頭に追加する。

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

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

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

5
2898963826126
154864622363291
990
993493502515
504212492
82
2509
40267696559119224
897868
5
591429093809
76308641170293
52194957565089
1282578703150921
2138540
3
1338
7659217700078821
340897154
出力1

________________5
____2898963826126
__154864622363291
______________990
_____993493502515
________504212492
_______________82
_____________2509
40267696559119224
___________897868
________________5
_____591429093809
___76308641170293
___52194957565089
_1282578703150921
__________2138540
________________3
_____________1338
_7659217700078821
________340897154

入力2

521898963826126465486
62236
99125901793493
72515820421249213231509650
576
45591192245697868081
11429093809326308641
702933621949
556508
7928257870
6509
661
385400133338
765921
200078821834089715
94202
6764379845237
280
156635300422216336599901547
4842797431816499945
4969802944031
271618344612618575
37360720238454995418
67266379862787591692774209419
70302474175796335780
54552174240979
775449554229427174569825
21947926479568
768574124
1
2183697783
4328996433757138182307562
5
1
631847386010159739891862966091
8814420
532
36934750353556885273534
634817275290
60406260346957162
491996220
817811229436
582590545531760933816247776
20044742756029358691221967471
9113
889
53230359693502005
419635322607434488479126902
4274861941
2856022780533172
385358085649400669051225
539544487201230816549782461
32
402
2
3906737141201844426027565861
9639732028906
8655193436820792
71447516492
5600229403981
33530732514809331792262637
1866
33
61093512624292721922049706
679199579907213191058927899
1807835851270878440
9426526272038872255
9208287208920338692540820
1768719454810475223637733
227664834317304
6838649548720643409732
58568705036868884
474411155
4158898624698684897478526
527399715793250695782771117434
85732723377989787350709601874
502457363305414268050
20880577471226056320374629
7215450940712610834682
620624681505
6445236261
7100090823167
394585322872064903249031
64
360949676
904115125
4209575458
126953748219672
682426941410067
2123117562471
30843265331
68342735066468123975852
274782168930646834672
788251915390600452871120
9345
10
870707756232260356
206610547961905442160970
22081
45725102725801904169481356887
出力2

_________521898963826126465486
_________________________62236
________________99125901793493
____72515820421249213231509650
___________________________576
__________45591192245697868081
__________11429093809326308641
__________________702933621949
________________________556508
____________________7928257870
__________________________6509
___________________________661
__________________385400133338
________________________765921
____________200078821834089715
_________________________94202
_________________6764379845237
___________________________280
___156635300422216336599901547
___________4842797431816499945
_________________4969802944031
____________271618344612618575
__________37360720238454995418
_67266379862787591692774209419
__________70302474175796335780
________________54552174240979
______775449554229427174569825
________________21947926479568
_____________________768574124
_____________________________1
____________________2183697783
_____4328996433757138182307562
_____________________________5
_____________________________1
631847386010159739891862966091
_______________________8814420
___________________________532
_______36934750353556885273534
__________________634817275290
_____________60406260346957162
_____________________491996220
__________________817811229436
___582590545531760933816247776
_20044742756029358691221967471
__________________________9113
___________________________889
_____________53230359693502005
___419635322607434488479126902
____________________4274861941
______________2856022780533172
______385358085649400669051225
___539544487201230816549782461
____________________________32
___________________________402
_____________________________2
__3906737141201844426027565861
_________________9639732028906
______________8655193436820792
___________________71447516492
_________________5600229403981
____33530732514809331792262637
__________________________1866
____________________________33
____61093512624292721922049706
___679199579907213191058927899
___________1807835851270878440
___________9426526272038872255
_____9208287208920338692540820
_____1768719454810475223637733
_______________227664834317304
________6838649548720643409732
_____________58568705036868884
_____________________474411155
_____4158898624698684897478526
527399715793250695782771117434
_85732723377989787350709601874
_________502457363305414268050
____20880577471226056320374629
________7215450940712610834682
__________________620624681505
____________________6445236261
_________________7100090823167
______394585322872064903249031
____________________________64
_____________________360949676
_____________________904115125
____________________4209575458
_______________126953748219672
_______________682426941410067
_________________2123117562471
___________________30843265331
_______68342735066468123975852
_________274782168930646834672
______788251915390600452871120
__________________________9345
____________________________10
____________870707756232260356
______206610547961905442160970
_________________________22081
_45725102725801904169481356887

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

// 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 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 iterator = list.iterator();
while (iterator.hasNext()) {
line = iterator.next();
int len = lenMax – line.length();
for (int i = 0; i max) {max = line.length}
});
// 右寄せで出力
lines.forEach(function(line) {
var s = new Array(max + 1).join(‘_’) + line;
s = s.substr(- max);
console.log(s);
});
});

CodeIQ運営事務局より

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

カテゴリー : デジタル・IT タグ :
CodeIQ MAGAZINEの記事一覧をみる ▶
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。