第83回【Python】文字列の配列

現在取り組んでいるのは、paiza ラーニング問題集「データセット選択メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

Python をゼロから勉強してみよう、のコーナー 83 回目です。

準備の人だと思っているので、準備ができていないと不安です。段取り 8 割は、まったくその通りだと思っています。しかし、会社には、段取り 9 割 5 分くらいの人がいます。見ていて、さすがにやりすぎだろう、と思います。バランスは大切です。

それでは、今日も頑張ってみようと思います。

文字列の配列

縦 H マス、横 W マスの H × W マスからなる迷路 S があります。上から i 行目、左から j 列目のマス は S_ij とあらわされ、 S_ij が「#」のとき壁であり、「.」のとき道です。整数 r、c が与えられるので、S_rc が壁かどうか判定してください。S_rc が壁なら「Yes」を、壁ではないなら「No」と出力してください。

H W r c
S_1
S_2
...
S_H

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

・ 1 ≦ H, W ≦ 100
・ 1 ≦ r ≦ H
・ 1 ≦ c ≦ W
・ S_i は「#」または「.」からなる W 文字の文字列


入力例

3 4 1 2
..#.
#.##
....

出力例

No

インデックスが 0 から始まることに注意すれば難しくない。内包表記を上手に使って、簡潔に書こう。

Python
H,W,r,c = map(int,input().split())
S = [input() for _ in range(H)]
if S[r-1][c-1] == '#':
    print('Yes')
else:
    print('No')
VBA
HWrc = Split(Cells(1, 1), " ")
H = Val(HWrc(0))
W = Val(HWrc(1))
r = Val(HWrc(2))
c = Val(HWrc(3))
Dim S() As String
ReDim S(H - 1)
For i = 0 To H - 1
    S(i) = Cells(i + 2, 1)
Next
If Mid(S(r - 1), c, 1) = "#" Then
    Debug.Print "Yes"
Else
    Debug.Print "No"
End If

最後に

Python と VBA はやはり違うんだぁというのを実感した問題でした。left 関数、mid 関数、right 関数で文字列から特定の長さの文字列を抜き出したりできるのだから、内部的には配列のように見えるんですがね。「文字列(インデックス)」みたいにしても、インデックスの場所にある文字を抜き出すことはできない。

まぁ、Java でも、同様で、chatAt で文字列から特定の場所の文字を抜き出すわけなので、特殊ってわけではないと思いますが。

引き続き、よろしくお願いいたします!

Python学習,Python,paiza

Posted by LeoSaki