初心者向けPaizaの解き方を解説してみた

※この記事はpaizaの問題を解いたことがない方に向けて
**paizaの問題を解く上で最低限必要な知識**を網羅できることを書いています。
基本的には解き方を解説していきますが、一部プログラミング言語
**Rubyでの記述方法も初心者の方向けに解説**します。

## paizaとは
paizaはITエンジニア向け国内最大の転職・就職・学習プラットフォーム
[paizaサイトへのリンクはこちら](https://paiza.jp/)

Qitaイベント
https://qiita.com/official-events/9ab96aa95d62fe3cbdd7

***

### プログラミングスキルチェック
paizaでは学習支援の一環としてプログラミングスキルがチェックできる問題が掲載されています。
このプログラミングスキルチェックは自分の好きなプログラミング言語を使用し
提出された問題をクリアできるか確認することができます。
問題はDランクからSランクまであり、順に難しくなってきます。

スキルチェックは自分の実力を測るだけでなく、就職支援のサービスにも活用されています。
ランクを上げることで企業から届くオファーが増えたり
自分の実力を証明できるようになります。

*** 

### 問題の解き方
#### 今回の問題
[文字の一致 (paizaランク D 相当)](https://paiza.jp/works/mondai/d_rank_skillcheck_sample/diff_str)
**今回は初心者向け**ということで**一番簡単**な**Dランク**の問題を試しに解いてみたいと思います。

### 問題の流れ
paizaでは
`①問題の内容 ②入力される値 ③期待される出力 ④条件`
`⑤入力例1 ⑥出力例1 ⑦出力例2 ⑧出力例2`
このような順番で問題が出されます。

基本的には**順番通り見ていけばDランクの問題は理解できる**と思いますが
問題の内容が**難しくても入力例・出力例などを見ると理解が深まる**こともあるので
まずは全体を流してみることをお勧めします。

また問題を解くときは一つ一つの言葉を噛み砕いたり、
**図などを書きながら解いて行くとより理解が深まる**でしょう

### 実際の問題
では実際の問題を見ながら解き方を解説していきます
#### ①問題の内容
`2 つの文字列 a, b が入力されます。文字列が一致していれば "OK" 、異なっていれば "NG" と出力してください。`

##### プログラミング未経験者向け解説
ここでaやbと表現しているのはaという文字が渡ってくるのではなく、
あくまでも`code`や`soccer`などの文字列データが渡ってきます。

ここでは2つの文字列と呼ばれるデータが入力値として渡ってきます。
その2つを比較して一致すればOK、不一致でNGを出力します。

ここであえて文字列と書いてあるので数値型や他の方のデータが渡ってくることはありません。

#### ②入力される値
***
入力される値
入力は以下のフォーマットで与えられます。

a
b

・1 行目に文字列 a
・2 行目に文字列 b


入力値最終行の末尾に改行が１つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
***
上記は実際に記述されている入力される値の内容です。

入力は行が分かれるごとに入力されます。
つまりこの書き方では
一行目でaという文字列データが、二行目にbという、文字列データが入力されますので
**行が変わる入力ごとにデータを受け取る処理が必要**になりそうです。

#### ③期待する出力
***
期待する出力
文字列 a と文字列 b が一致していれば "OK" 、異なっていれば "NG" と出力してください。
***

ここで確認したいのは出力結果がどのようなものが求められているかです。
**期待される出力は"OK"となっているので"ok"や"Ok"など一文字でも間違っていると
不合格**となります。
問題の提出前に提出前動作確認があるので必ず出力結果を確認してから提出しましょう。

#### ④条件
***
条件
すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ 文字列 a の長さ ≦ 100
・1 ≦ 文字列 b の長さ ≦ 100
***
今回の問題ではさほど影響ありませんが条件を指定されると
条件い見合った計算、出力結果を求められます。
条件を見落として実際に必要な計算量に足らないなどで
**例題ではクリアできても他のテストコードでNGになることもあるので条件もしっかり確認しましょう**

入力例や出力例はこの後の解き方解説で書きますので割愛します。

### 問題の解き方
では実際にRubyの記述に則り問題の解き方をコードと一緒に書いていきます。

``` ruby
#まず初めに入力されるデータを取得します
#入力例1
#paiza
#paiza

#入力例2
#paiza
#aziap

# 上記は入力する必要はありません。下記の１文でaとbの入力を受け取れます。
a, b = gets.chomp, gets.chomp #このように受け取ります
# a, b = gets(chomp: true), gets(chomp: true)でも可

=begin
getsメソッドの説明
ここではa, bという変数にgetsメソッドと呼ばれるrubyのメソッドを使用しています。
getsはファイルを受け取るメソッドですが、空の場合は標準入力を受け取るのでここで受け取ります。
つまりgetsだけでは入力例1であればaに'paiza\n' bに'paiza\n'を受け取ることができます

a = gets
b = gets と書いても同じ結果を得られますが記述が少なくなるように上記のように記述しています。

a:'paiza\n' b:'paiza\n' 

chompメソッドの説明
上記のgetsメソッドでは一目で見ると同じものが書かれているように見え
比較してもtrueが返ってくるためクリアとなりそうですがそのまま提出すると不合格となります。
原因はNGとなっている入力を見てもわからなかったですが最後の\nと表示されている部分が影響しています。
\nというのメタ文字と呼ばれるもので改行を表します。
この改行を取り除くためにchompメソッドを利用します。
これは文字列のStringクラスで使えるメソッドです。
つまり'paiza\n'.chompと表記しているような表現で前にある文字列から\nを取り除きます。
getsのみで取り除くのであればgets(chomp: true)と書くことでgetsのchompパラメータがtrueになり
同じように取り除くことができます。
どちらも同じ記述になりますのでお好きな方を使うと良いと思います。
=end

puts a == b ? 'OK' : 'NG'

=begin
最後に出力ですが
putsメソッドで結果を出力します。
putsメソッドを除くと　a == b ? 'OK' : 'NG'となり三項演算子と呼ばれる比較の方法です
a == b　は条件式となり　aとbが等しいか確認しています。
つまり上記で得られたaとbを比較しています　'paiza' == 'paiza'
?は三項演算子の指定方法で　?を書くことでif文の役割をします。
?の後に等しい時の値 つまりtrueの時の値'OK'を書き　: の後ろに等しくない時の値falseの時の値'NG'を書きます。
rubyでは比較結果の値返るので三項演算子の頭にputsをつけておくとそのまま出力されますので
この問題であれば2行で終わります。

出力結果は自分で記述するため前述したように'ok'や'Ok'とタイプミスが内容に注意するのと
''や""で囲うのを忘れると文字列とみなされずNGとなりますので忘れずにつけましょう。
=end
```

### 最後に
今回は簡単な問題でpaizaの問題の見方・解き方を解説しました。
まずは簡単な問題から入出力になれるように問題を解いていくとよいでしょう。

また問題を解く際は図解にしたり、一つ一つの入力や出力結果が正しく表示されているか
確認しながら行っていくとコードの内容や返ってくる値も見れるため理解が深まると思います。

今回の問題であれば
入力を変数で受け取ったら１回出力して確認する。
if文など書いたら真偽の状態が自分の思っている通りのロジックになっているか
出力から確認してから中身を書くなど
一つ一つ確認しながら取り組むと良いでしょう。


それではpaizaで学習を楽しみながらスキルランクを上げられるように
みんなで頑張りましょう！