fork download
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int n;
  6. int arr[101][101]={0,};
  7. vector<pair<int,char>>dir;
  8. int dx[4]={0,1,0,-1}, dy[4]={1,0,-1,0}, way=0; //방향
  9. int cnt=0;
  10. queue<pair<int,int>>snake;
  11.  
  12. int game(){
  13. snake.push({1,1});
  14. arr[1][1]=2;
  15.  
  16. while(1){
  17. cnt++;
  18.  
  19. int hx = snake.back().first;
  20. int hy = snake.back().second;
  21. int nx = hx + dx[way];
  22. int ny = hy + dy[way];
  23.  
  24. //벽이나 몸인지
  25. if(nx<1 || nx>n || ny<1 || ny>n || arr[nx][ny]==2){
  26. break;
  27. }
  28.  
  29. //사과가 있다면
  30. if(arr[nx][ny]==1){
  31. arr[nx][ny]=2;
  32. snake.push({nx,ny});
  33. }
  34. else{//사과가 없다면
  35. arr[nx][ny] = 2;
  36. snake.push({nx, ny});
  37. auto tail = snake.front();
  38. snake.pop();
  39. arr[tail.first][tail.second] = 0;
  40. }
  41.  
  42. //시간별 회전
  43. if(!dir.empty() && cnt==dir[0].first){
  44. if(dir[0].second=='L')
  45. way=(way+3)%4;
  46. else
  47. way=(way+1)%4;
  48.  
  49. dir.erase(dir.begin());
  50. }
  51. }
  52.  
  53. return cnt;
  54. }
  55.  
  56. int main(){
  57. int k,l,a,b,x;
  58. char c;
  59.  
  60. cin>>n>>k;
  61.  
  62. while(k--){
  63. cin>>a>>b;
  64.  
  65. arr[a][b]=1;
  66. }
  67.  
  68. cin>>l;
  69.  
  70. while(l--){
  71. cin>>x>>c;
  72.  
  73. dir.push_back({x,c});
  74. }
  75.  
  76. cout<<game();
  77.  
  78. return 0;
  79. }
Success #stdin #stdout 0.01s 5292KB
stdin
10
5
1 5
1 3
1 2
1 6
1 7
4
8 D
10 D
11 D
13 L
stdout
13