yokobuttonの不定期で競技プログラミングをするブログ

不定期で解けた競技プログラミングコンテストの問題を載せています。

AtCoder Beginner Contest 244 B - Go Straight and Turn Right

問題の要約
 xy平面を考える。x軸の正の向きを東向き、y軸の正の向きを北向きとする。
 はじめ、点(x,y)=(0,0)にいて、東を向いている。
 SとRのみからなる長さNの文字列T=t1t2...tNが与えられる。i=1,2,...,Nの順番で下記を行う。
  ・ti=Sならば、いま向いている方向に距離1だけ進む。
  ・ti=Rならば、そのばで右に90度回転する。
 上記の手順を終えた後に居る点の座標を出力せよ。
制約
 1<=N<=10^5
 TはSとRのみからなる長さNの文字列
入力
 N
 T
考え方
 1,Nの大きさから、そのままシミュレーションすればよい。

実際のプログラム
#include<iostream>
#include<vector>
#include<map>
#include<string>

using namespace std;

int main(){
  int N;
  cin >> N;
  string T;
  cin >> T;
  int x = 0;
  int y = 0;
  int cardinal_direction_i = 0;
  vector<pair<int,int>> cardinal_direction = {{1,0},{0,-1},{-1,0},{0,1}};
  for(int i = 0; i < N; i++){
    if(T[i] == 'S'){
      x += cardinal_direction[cardinal_direction_i].first;
      y += cardinal_direction[cardinal_direction_i].second;
    }else if(T[i] == 'R'){
      cardinal_direction_i = (cardinal_direction_i + 1) % 4;
    }
  }
  
  cout << x << " " << y << endl;
  
  return 0;
}