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;
}