公式

B - 倉庫の点検ロボット / Warehouse Inspection Robot 解説 by kyopro_friends


問題文の指示通りにロボットの移動をシミュレーションし、都度倉庫の状態を更新します。最後にグリッド全体を調べることで残った荷物の個数を求めます。

ロボットがグリッドの外に移動しないようにする点、最初のマスの荷物も回収される点に注意してください。

実装例 (C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
  int h, w, n;
  cin >> h >> w >> n;
  vector<string>s(h);
  for(int i=0; i<h; i++) cin >> s[i];
  string T;
  cin >> T;

  int i = 0, j = 0;
  if(s[i][j] == '#'){
    s[i][j] = '.';
  }

  for(char t: T){
    if(t == 'U'){
      if(i-1 >= 0){
        i--;
      }
    }else if(t == 'D'){
      if(i+1 < h){
        i++;
      }
    }else if(t == 'L'){
      if(j-1 >= 0){
        j--;
      }
    }else if(t == 'R'){
      if(j+1 < w){
        j++;
      }
    }
    if(s[i][j] == '#'){
      s[i][j] = '.';
    }
  }

  int ans = 0;
  for(int i=0; i<h; i++){
    for(int j=0; j<w; j++){
      if(s[i][j] == '#'){
        ans++;
      }
    }
  }
  cout << ans << endl;
}

実装例 (Python)

H, W, N = map(int, input().split())
S = [list(input()) for _ in range(H)]
T = input()

i, j = 0, 0
if S[i][j] == '#':
  S[i][j] = '.'

for t in T:
  if t == 'U':
    if i-1 >= 0:
      i -= 1
  elif t == 'D':
    if i+1 < H:
      i += 1
  elif t == 'L':
    if j-1 >= 0:
      j -= 1
  elif t == 'R':
    if j+1 < W:
      j += 1
  if S[i][j] == '#':
    S[i][j] = '.'

ans = 0
for i in range(H):
  for j in range(W):
    if S[i][j] == '#':
      ans += 1
print(ans)

投稿日時:
最終更新: