fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. vector<pair<int,int>> snake;
  5. int dir[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};
  6. int main() {
  7. int n,k,apple[101][101]={0},a,b;
  8. int l,d[101],ret=0;
  9. char dc[101];
  10. scanf("%d %d",&n,&k);
  11. for(int i=0;i<k;i++){
  12. scanf("%d %d",&a,&b);
  13. apple[a][b] = 1;
  14. }
  15. scanf("%d",&l);
  16. for(int i=0;i<l;i++){scanf("%d %c",&d[i],&dc[i]);}
  17.  
  18. snake.push_back(make_pair(1,1));
  19. //start
  20. pair<int,int> head;
  21. int headdi=1; // 기본방향 1
  22. int checkdi = 0;
  23. while(true){// 방향체크 후 이동, 이동 가능,
  24. head = snake.back();
  25. head.first +=dir[headdi][0];
  26. head.second +=dir[headdi][1];
  27. ret++;
  28. if(ret == d[checkdi]){
  29. if(dc[checkdi] == 'L'){headdi = (headdi+3)%4;}
  30. else {headdi = (headdi+1)%4;}
  31. checkdi++;
  32. }
  33.  
  34. if(head.first > n || head.first < 1
  35. || head.second > n || head.second < 1 ){break;}
  36.  
  37. int ch =0;
  38. int bamsize = snake.size();
  39. pair<int,int> bambody;
  40. for(int i=0;i<bamsize-1;i++){
  41. bambody=snake[i];
  42. if( (bambody.first == head.first)
  43. && (bambody.second == head.second)){
  44. ch = 1;
  45. break;
  46. }
  47. }
  48. if(ch == 1){break;}
  49.  
  50. if(apple[head.first][head.second] == 1){
  51. apple[head.first][head.second]=0;
  52. }else{snake.erase(snake.begin());}
  53.  
  54. snake.push_back(head);
  55.  
  56. }
  57. printf("%d",ret);
  58. return 0;
  59. }
Success #stdin #stdout 0.01s 5448KB
stdin
10
5
1 5
1 3
1 2
1 6
1 7
4
8 D
10 D
11 D
13 L
stdout
13