Header
2020-03-21
2020-09-07

paiza(パイザ)Cランク練習問題|単語のカウントのRubyサンプルコードと解説

2020 03 21 9a275b4b2e8a55dd1834694a66e3e7e8 s

paiza(パイザ)Cランク相当の練習問題の解説とサンプルコードの|単語のカウントについてRubyサンプルコードと解説を記載します。

記載したサンプルコードは動作しましたが、Paizaに公式サンプルコードの記載はないので、他にも記載方法はあると思われます

問題の要件と概要は以下から

単語のカウント

以下から公式の抜粋を元にプログラム化する際の思考の流れとサンプルコードを記載します

Cランク問題の単語のカウントの入出力値

以下公式抜粋

問題概要

スペースで区切られた英単語列が与えられます。
英単語列に含まれる英単語の出現回数を出現した順番に出力してください。

入力される値
半角スペースで区切られた長さNの文字列

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
単語、半角スペース、出現回数の順で1行に1単語で出現したすべての単語を、列に出現する順に出力してください。

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

1 ≦ N ≦ 1,000

入力値

半角スペースで区切られた長さNの文字列


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力

単語、半角スペース、出現回数の順で1行に1単語で出現したすべての単語を、列に出現する順に出力してください

入出力例(公式から抜粋)

入力例1
red green blue blue green blue

出力例1
red 1
green 2
blue 3

入力例2
Apple Apricot Orange Cherry Apple Orange Cherry Orange

出力例2
Apple 2
Apricot 1
Orange 3
Cherry 2

問題をプログラム化する際の考え方

入力値で以下のように記載されています。

入力例1
red green blue blue green blue

ここで分かる事は

1:1行に半角スペースで区切られた複数の英単語が入力される

2:同じ英単語が入力される事もあるという事が分かります

次に出力例を見ると

出力例1
red 1
green 2
blue 3

出力例2
Apple 2
Apricot 1
Orange 3
Cherry 2

1:入力された英単語が同じならそれを一纏めにしている  

2:同じ英単語がいくつあるか数えている

3:それらを紐付け、入力された最初の英単語から順に出力している

プログラム化する際にRuby的な処理を考える

1:1行の入力される値の文字列の取得

2:取得した文字列の重複する要素を数え、グループ化する

3:ハッシュにする事で、各英単語と重複する回数を紐付けやすい (いくつ同じ単語が入力されたのかの確認しやすい)

4:ハッシュ化し、カウントし終えた要素を1つずつ取り出す

paizaCランク問|単語のカウントのRubyサンプルコード

strings = gets.chomp.split(" ")
hashs = strings.group_by(&:itself).map{|key, value|[key, value.count]}.to_h

hashs.each do |key, value|
   puts "#{key} #{value}"
end

1行に複数の要素が入力される為、splitを使って各要素(英単語)を取り出し、配列に格納しました。

strings = gets.chomp.split(" ")

配列に格納した、各要素を、group_byで重複する要素を纏めて&はブロック変数にする宣言を、:itself で変数自身を返し map は、配列の要素の数だけブロック内の処理を繰り返し、結果として作成された配列を返しています。

key, value.count で キーとなる英単語を取得 value.count とする事で重複する要素を数えました。 to_h とする事で、ハッシュ{}にする事が出来ます。

hashs = strings.group_by(&:itself).map{|key, value|[key, value.count]}.to_h

最後にeach を使って、ハッシュからkey, value を順に取り出し、puts で改行ありで出力しています。

関連問題

paizaのスキルチェックの難易度|各ランクの特徴・ランクアップのコツを現役エンジニアが解説

paiza(パイザ)Bランク練習問題|日別訪問者数の最大平均区間のRubyサンプルコードと解説

paiza(パイザ)Bランク練習問題|神経衰弱のRubyサンプルコードと解説

paiza(パイザ)Cランク練習問題|5以上の整数の合計のRubyサンプルコードと解説

paiza(パイザ)Cランク練習問題|検索履歴のRubyサンプルコードと解説

paiza(パイザ)Cランク練習問題|検索履歴のRubyサンプルコードと解説

paiza(パイザ)Cランク練習問題|宝くじのRubyサンプルコードと解説

paiza(パイザ)Cランク練習問題|単語のカウントのRubyサンプルコードと解説

paiza(パイザ)Cランク練習問題|野球の審判のRubyサンプルコードと解説

paiza(パイザ)Cランク練習問題|【競技7】奇数大好き山田さんのRubyサンプルコードと解説

Rubyで以下のような練習問題を用意しているので、回答できなかった方はまずは以下練習問題を試してみてください

Rubyの練習問題:配列編|初心者・独学者向け入門コンテンツ

Rubyの練習問題:文字列編|初心者・独学者向け入門コンテンツ

Rubyの練習問題:ハッシュ編|初心者・独学者向け入門コンテンツ

Rubyの練習問題:繰り返し処理編|初心者・独学者向け入門コンテンツ

Rubyの練習問題:ファイル操作編|初心者・独学者向け入門コンテンツ

Rubyでバブルソートを行う

Rubyで二分探索(バイナリサーチ)を行う

paiza(パイザ)に慣れるとAtCoderアットコーダーもお勧めです

その他関連記事

エンジニア転職限定|スカウト機能がある転職サイトを現役エンジニアが解説

未経験からエンジニアに転職した人間が考える、今からエンジニアに就職する方法

SESからフリーランスになる際のメリットとデメリット|法人化した人間が解説

職歴を作るためにSESに就職して、Web系エンジニアへ転職は可能か

プログラミングで挫折する人の特徴|未経験からエンジニアに転職した人間が解説

独学プログラミングの勉強手順|未経験からエンジニアに転職した人間が解説

あなたにお勧めの記事
前の記事
次の記事