長期投資シミュレーションツール『Tousimu』をリリースしました!

【解答付き】paizaスキルチェック過去問題「神経衰弱(Bランク)」を解説!

プログラミング
スポンサーリンク

この記事では

プログラミング学習サービスpaizaラーニング

スキルチェックレベルアップ問題集をわかりやすく解説します!

プログラミング言語はpythonです。

今回はBランク相当の以下の問題を解説します。

他のレベルアップ問題集のの解答と解説もしているので

ぜひご参考ください!

またpaizaの各ランクの攻略法は

こちらで詳しく紹介しているので、ぜひご参考ください!

スポンサーリンク

この問題を解くための3つのポイント

まずは「この問題を解くためのポイント」をご説明します。

問題はこちらからご確認ください。

神経衰弱 (paizaランク B 相当)

この問題を解くためのポイントは3つです。

この問題を解くためのポイント
  • トランプの初期配置の入力を受け取る
  • めくったカードが揃ったか判定
  • 各プレイヤーのトランプの枚数をカウント

トランプの初期配置の入力を受け取る

まずは「トランプの初期配置の入力を受け取る」です。

今回の問題では

1行目でトランプの初期配置の縦の枚数と横の枚数が入力され

2行目以降の(縦の枚数+1)行で、

1 2 3 4のように各トランプの数字が半角スペース区切りで入力されます。

入力については、こちらをご参考ください!

そのためリストfor文を使って入力を受け取ります。

"""
Hは初期配置の縦の枚数
"""

# 初期配置のリストを定義
init_cards = []

# 縦の枚数だけ繰り返す
for _ in range(H):
    # 各行のトランプの数字をリストに追加
    init_cards.append(input().split())

# init_cardsには以下のように代入される
"""
[
['1', '2', '3', '4'],
['5', '6', '7', '8'],
['1', '2', '3', '4'],
]
"""

リストとfor文については、こちらをご参考ください!

また内包表記を使うと、さらにシンプルです。

"""
Hは初期配置の縦の枚数
"""

# 初期配置
init_cards = [input().split() for _ in range(H)]

内包表記については、こちらをご参考下さい!

めくった2枚のカードが揃ったか判定

次は「めくった2枚のカードが揃ったか判定」です。

今回の問題ではトランプの初期配置が入力された後

めくった回数が入力され、それ以降の(めくった回数)行で

めくったトランプの縦横の位置半角スペース区切りで入力されます。

そのため内包表記を使った入力の受け取りを

めくった回数だけfor文で繰り返します。

"""
Lはめくった回数
"""

# めくった回数だけ繰り返す
for i in range(L):
    # めくったトランプの縦横の位置をint型に変換し、1引いた後、変数に代入
    a, b, A, B = [int(x)-1 for x in input().split()]

ここで初期配置のリストインデックスと合わせるために

入力された縦横の位置をint型に変換し、1引きます!

int型への変換や引き算については、こちらをご参考ください!

次にif文を使って

「めくった2枚のカードが揃ったか」で条件分岐を行います。

そのためトランプの縦横の位置を

インデックスとしてリストの要素を指定し同じ数字か判定します。

# めくった回数だけ繰り返す
for i in range(L):
    # めくったトランプの縦横の位置をint型に変換し、1引いた後、変数に代入
    a, b, A, B = [int(x)-1 for x in input().split()]

    # 2枚のカードが揃った場合
    if init_cards[a][b] == init_cards[A][B]:
        # 揃った場合の処理
    else:
        # 揃わなかった場合の処理

if文については、こちらをご参考ください!

各プレイヤーのトランプの枚数をカウント

最後は「各プレイヤーのトランプの枚数をカウント」です。

今回の問題では最終的な結果として

各プレイヤーが取ったトランプの枚数出力しなければなりません。

そのため、トランプの枚数をリストを使ってカウントします。

まずは長さがプレイヤーの人数で要素がすべて0のリストを定義します。

"""
Nはプレイヤーの人数
"""

# 各プレイヤーのトランプの枚数のリストを定義
results = [0] * N

次にプレイヤーを指定する変数を定義し

カードが揃った場合にそのプレイヤーの枚数を2増やします。

# 各プレイヤーのトランプの枚数のリストを定義
results = [0] * N

# プレイヤーを指定する変数を定義
who = 0

# めくった回数だけ繰り返す
for i in range(L):
    # めくったトランプの縦横の位置をint型に変換し、1引いた後、変数に代入
    a, b, A, B = [int(x)-1 for x in input().split()]

    # 2枚のカードが揃った場合
    if init_cards[a][b] == init_cards[A][B]:
        # プレイヤーのトランプの枚数を2増やす
        results[who] += 2
    else:
        # 揃わなかった場合の処理

最後に揃わなかった場合に、次のプレイヤーに番を移します。

else:
    # 次のプレイヤーの番に移る
    who = (who + 1) % N

ここで最後のプレイヤーの次は、最初のプレイヤーに戻るため

プレイヤーの人数で割った余りを計算します!

余りの計算については、こちらをご参考ください!

またカードが揃った場合は、

同じプレイヤーが続けてカードをめくるので処理は必要ありません。

スポンサーリンク

みんなでしりとり!(paizaランク B 相当)の解答

ではここまで紹介したポイントを使って、問題を解いていきます。

入力を受け取り、リストや変数を準備

まずは「入力を受け取り、リストや変数を準備」です。

今回の問題では最初に

  • トランプの初期配置の縦の枚数
  • トランプの初期配置の横の枚数
  • プレイヤーの人数

が半角スペース区切りで1行で入力されます。

そのため内包表記split関数を使い3つの変数に代入し、

さらにint型にも変換します。

# H, W, Nがそれぞれ縦の枚数、横の枚数、プレイヤーの人数
H, W, N = [int(x) for x in input().split()]

内包表記については、こちらをご参考ください!

次にトランプの初期配置が入力されるので

内包表記を使って入力を受け取ります。

# H, W, Nがそれぞれ縦の枚数、横の枚数、プレイヤーの人数
H, W, N = [int(x) for x in input().split()]

# 初期配置の入力を受け取る
init_cards = [input().split() for _ in range(H)]

次にトランプをめくった回数が入力されるので

int型に変換し変数に代入します。

# H, W, Nがそれぞれ縦の枚数、横の枚数、プレイヤーの人数
H, W, N = [int(x) for x in input().split()]

# 初期配置の入力を受け取る
init_cards = [input().split() for _ in range(H)]

# めくった回数
L = int(input())

int型への変換については、こちらをご参考ください!

次にfor文内包表記を使って

めくったトランプの縦横の位置の入力を受け取ります。

# H, W, Nがそれぞれ縦の枚数、横の枚数、プレイヤーの人数
H, W, N = [int(x) for x in input().split()]

# 初期配置の入力を受け取る
init_cards = [input().split() for _ in range(H)]

# めくった回数
L = int(input())

# めくった回数だけ繰り返す
for i in range(L):
    # めくったトランプの縦横の位置をint型に変換し、1引いた後、変数に代入
    a, b, A, B = [int(x)-1 for x in input().split()]

for文については、こちらをご参考ください!

そして以降の処理のために

  • 各プレイヤーの取ったトランプの枚数のリスト
  • プレイヤーを指定する変数

の2つを定義します。

# H, W, Nがそれぞれ縦の枚数、横の枚数、プレイヤーの人数
H, W, N = [int(x) for x in input().split()]

# 初期配置の入力を受け取る
init_cards = [input().split() for _ in range(H)]

# めくった回数
L = int(input())

# 各プレイヤーのトランプの枚数のリストを定義
results = [0] * N

# プレイヤーを指定する変数を定義
who = 0

# めくった回数だけ繰り返す
for i in range(L):
    # めくったトランプの縦横の位置をint型に変換し、1引いた後、変数に代入
    a, b, A, B = [int(x)-1 for x in input().split()]

めくったカードが揃ったか判定し、各プレイヤーの枚数を計算

次は「めくったトランプが揃ったか判定し、各プレイヤーの枚数を計算」です。

まずは「めくったカードが揃ったか」で

if文を使って条件分岐を行います。

# めくった回数だけ繰り返す
for i in range(L):
    # めくったトランプの縦横の位置をint型に変換し、1引いた後、変数に代入
    a, b, A, B = [int(x)-1 for x in input().split()]

    # 2枚のカードが揃った場合
    if init_cards[a][b] == init_cards[A][B]:
        # 揃った場合の処理
    else:
        # 揃わなかった場合の処理

if文についてはこちらをご参考ください!

次に揃った場合に、各プレイヤーの枚数を2増やし

揃わなかった場合は、次のプレイヤーの番に移ります。

# めくった回数だけ繰り返す
for i in range(L):
    # めくったトランプの縦横の位置をint型に変換し、1引いた後、変数に代入
    a, b, A, B = [int(x)-1 for x in input().split()]

    # 2枚のカードが揃った場合
    if init_cards[a][b] == init_cards[A][B]:
        # プレイヤーのトランプの枚数を2増やす
        results[who] += 2
    else:
        # 次のプレイヤーの番に移る
        who = (who + 1) % N

結果を出力

最後は「結果を出力」です。

今回の問題では最終的な結果として

改行区切りで各プレイヤーの取った枚数を出力します。

# プレイヤーごとに繰り返す
for res in results:
    # 取った枚数を出力
    print(res)

出力についてはこちらをご参考ください!

解答

まとめると解答は以下です。

# H, W, Nがそれぞれ縦の枚数、横の枚数、プレイヤーの人数
H, W, N = [int(x) for x in input().split()]

# 初期配置の入力を受け取る
init_cards = [input().split() for _ in range(H)]

# めくった回数
L = int(input())

# 各プレイヤーのトランプの枚数のリストを定義
results = [0] * N

# プレイヤーを指定する変数を定義
who = 0

# めくった回数だけ繰り返す
for i in range(L):
    # めくったトランプの縦横の位置をint型に変換し、1引いた後、変数に代入
    a, b, A, B = [int(x)-1 for x in input().split()]

    # 2枚のカードが揃った場合
    if init_cards[a][b] == init_cards[A][B]:
        # プレイヤーのトランプの枚数を2増やす
        results[who] += 2
    else:
        # 次のプレイヤーの番に移る
        who = (who + 1) % N

# プレイヤーごとに繰り返す
for res in results:
    # 取った枚数を出力
    print(res)

ぜひご参考ください!

スポンサーリンク

まとめ

今回はpaizaのレベルアップ問題集の中で

  • 神経衰弱 (paizaランク B 相当)

の解答と解説を紹介しました。

Bランクの問題になると、問題文が長くなり理解が難しくなります。

しかし問題を誤解していたことに後から気づいてやり直すと

大幅な時間のロスになってしまい

おそらくランクアップが出来ません。

まずは焦らず問題をちゃんと理解するように心がけましょう!

また他のレベルアップ問題集の解説も、ぜひご参考ください!

Pythonを学びたいと思っているけど

  • プログラミングスクールに数十万円も払えない・・・
  • 独学だとどうやって学んだらいいかわからない・・・
  • Pythonのインストールや環境構築がよくわからない・・・

といったお悩みを抱えている方はいませんか?

Pythonの学習はオンライン学習サービスのPyQがおすすめです!

PyQ

PyQの特徴は圧倒的なコストパフォーマンスで

たった月額3,040円で以下のPythonに関する内容が学び放題です!

PyQで学べる内容
  • プログラミングの基本
  • Python入門〜中級
  • ユニットテスト、設計
  • Webアプリ開発
  • Django(Pythonを使ったWebアプリ開発のフレームワーク)
  • スクレイピング
  • データ解析
  • 機械学習
  • 統計入門
  • アルゴリズム

またブラウザ上でコードを書いて学習できるため

面倒なPythonのインストールや環境構築なども一切不要です!

実際に私もプログラミングを始めた頃に利用していて

PyQを一通りやり終えた後は

  • Djangoを使ったポートフォリオの制作
  • スクレイピングによる作業の自動化
  • ディープラーニング

などのプログラムを自分で書けるようになり

paizaのスキルチェックでもSランクを所得しました!

PyQは登録後すぐに学習を開始できるので

Pythonの学習方法でお悩みの方は、今すぐPyQで学習をスタートしましょう!

しかし

  • 独学で挫折した経験がある・・・
  • 短期間でpythonを習得したい!
  • プロのエンジニアからpythonを学びたい!

という方は、PyQでの独学よりも

プログラミングスクールでの学習が最適かもしれません!

pythonが学べるおすすめのプログラミングスクールはこちら!

TechAcademy Pythonコース

おすすめスクールNo.1:TechAcademy Pythonコース

TechAcademyがおすすめな理由
  • 学習システムを1週間無料で体験できる!
  • 完全オンラインだから、忙しくても続けられる!
  • 各受講生に現役エンジニアのメンターがつく!

DIVE INTO CODE エキスパートAIコース

おすすめスクールNo.2:DIVE INTO CODE エキスパートAIコース

DIVE INTO CODEがおすすめな理由
  • 本気の人のためのスクール!事前テストで選考あり!
  • 無料説明会&体験セミナーあり!
  • 通学 or オンラインが選択できる!

CodeCamp Pythonデータサイエンスコース

おすすめスクールNo.3:CodeCamp Pythonデータサイエンスコース

DIVE INTO CODEがおすすめな理由
  • 無料体験レッスン受講で10,000円引き
  • 受講者数30,000人超えの圧倒的な実績!
  • レッスン満足度96.6%

ぜひ自分に合った学習方法でPythonを習得しましょう!

プログラミング paizaでSランク!
スポンサーリンク
Follow Me!
スポンサーリンク
まろぶろぐ
タイトルとURLをコピーしました