문제

링크

풀이

#include <stdio.h>
 
typedef enum Command {
  R, L, B, T, RT, LT, RB, LB
} Command;
 
void move(char king[], char stone[], Command command) {
  switch(command) {
  case R:
    if (king[0] != 'H') king[0]++;
    if (king[0] == stone[0] && king[1] == stone[1]) {
      if (stone[0] != 'H') stone[0]++;
      else king[0]--;
    }
    break;
 
  case L:
    if (king[0] != 'A') king[0]--;
    if (king[0] == stone[0] && king[1] == stone[1]) {
      if (stone[0] != 'A') stone[0]--;
      else king[0]++;
    }
    break;
 
  case B:
    if (king[1] != '1') king[1]--;
    if (king[0] == stone[0] && king[1] == stone[1]) {
      if (stone[1] != '1') stone[1]--;
      else king[1]++;
    }
    break;
 
  case T:
    if (king[1] != '8') king[1]++;
    if (king[0] == stone[0] && king[1] == stone[1]) {
      if (stone[1] != '8') stone[1]++;
      else king[1]--;
    }
    break;
 
  case RT:
    if (king[0] != 'H' && king[1] != '8') {
      king[0]++;
      king[1]++;
    }
    if (king[0] == stone[0] && king[1] == stone[1]) {
      if (stone[0] != 'H' && stone[1] != '8') {
        stone[0]++;
        stone[1]++;
      } else {
        king[0]--;
        king[1]--;
      }
    }
    break;
 
  case LT:
    if (king[0] != 'A' && king[1] != '8') {
      king[0]--;
      king[1]++;
    }
    if (king[0] == stone[0] && king[1] == stone[1]) {
      if (stone[0] != 'A' && stone[1] != '8') {
        stone[0]--;
        stone[1]++;
      } else {
        king[0]++;
        king[1]--;
      }
    }
    break;
 
  case RB:
    if (king[0] != 'H' && king[1] != '1') {
      king[0]++;
      king[1]--;
    }
    if (king[0] == stone[0] && king[1] == stone[1]) {
      if (stone[0] != 'H' && stone[1] != '1') {
        stone[0]++;
        stone[1]--;
      } else {
        king[0]--;
        king[1]++;
      }
    }
    break;
 
  case LB:
    if (king[0] != 'A' && king[1] != '1') {
      king[0]--;
      king[1]--;
    }
    if (king[0] == stone[0] && king[1] == stone[1]) {
      if (stone[0] != 'A' && stone[1] != '1') {
        stone[0]--;
        stone[1]--;
      } else {
        king[0]++;
        king[1]++;
      }
    }
    break;
  }
}
 
int main(void) {
  int n;
  char king[3], stone[3], buffer[3];
  Command command;
 
  scanf("%s %s %d", king, stone, &n);
  for (int i=0; i<n; i++) {
    scanf("%s", buffer);
    if (buffer[0] == 'R') {
      if (buffer[1] == 'T') command = RT;
      else if (buffer[1] == 'B') command = RB;
      else command = R;
    } else if (buffer[0] == 'L') {
      if (buffer[1] == 'T') command = LT;
      else if (buffer[1] == 'B') command = LB;
      else command = L;
    } else if (buffer[0] == 'B') {
      command = B;
    } else if (buffer[0] == 'T') {
      command = T;
    }
    move(king, stone, command);
  }
  printf("%s\n%s", king, stone);
  return 0;
}