백준 1063 c : 구현

magicdrill·2025년 5월 1일

백준 문제풀이

목록 보기
595/673

백준 1063 c : 구현

#include <stdio.h>
#include <string.h>
#pragma warning(disable:4996)

void input_data(int* king_x, int* king_y, int* stone_x, int* stone_y, char move[][3], int *move_size);
void find_answer(int king_x, int king_y, int stone_x, int stone_y, char move[][3], int move_size);

int main(void) {
	int king_x, king_y, stone_x, stone_y, move_size;
	char move[51][3];

	input_data(&king_x, &king_y, &stone_x, &stone_y, move, &move_size);
	find_answer(king_x, king_y, stone_x, stone_y, move, move_size);

	return 0;
}

void input_data(int *king_x, int* king_y, int* stone_x, int* stone_y, char move[][3], int* move_size) {
	int N, i;
	char position[3];

	scanf("%s", position);
	*king_x = position[0] - 'A';
	*king_y = position[1] - '1';

	scanf("%s", position);
	*stone_x = position[0] - 'A';
	*stone_y = position[1] - '1';

	scanf("%d", move_size);
	for (i = 0; i < *move_size; i++) {
		scanf("%s", move[i]); 
	}

	return;
}

void find_answer(int king_x, int king_y, int stone_x, int stone_y, char move[][3], int move_size) {
	int i;
	int x_direction[8] = { 1, -1, 0,  0, 1, -1, 1, -1 };
	int y_direction[8] = { 0,  0, -1, 1, 1,  1, -1, -1 };
	int king_next_x, king_next_y, stone_next_x, stone_next_y;
	int dx = 0, dy = 0;

	printf("king : %d %d / stone : %d %d\n", king_x, king_y, stone_x, stone_y);

	for (i = 0; i < move_size; i++) {
		if (strcmp(move[i], "R") == 0) {
			dx = x_direction[0];
			dy = y_direction[0];
		}
		else if (strcmp(move[i], "L") == 0) {
			dx = x_direction[1];
			dy = y_direction[1];
		}
		else if (strcmp(move[i], "B") == 0) {
			dx = x_direction[2];
			dy = y_direction[2];
		}
		else if (strcmp(move[i], "T") == 0) {
			dx = x_direction[3];
			dy = y_direction[3];
		}
		else if (strcmp(move[i], "RT") == 0) {
			dx = x_direction[4];
			dy = y_direction[4];
		}
		else if (strcmp(move[i], "LT") == 0) {
			dx = x_direction[5];
			dy = y_direction[5];
		}
		else if (strcmp(move[i], "RB") == 0) {
			dx = x_direction[6];
			dy = y_direction[6];
		}
		else if (strcmp(move[i], "LB") == 0) {
			dx = x_direction[7];
			dy = y_direction[7];
		}

		king_next_x = king_x + dx;
		king_next_y = king_y + dy;
		
		if (king_next_x >= 0 && king_next_x < 8 && king_next_y >= 0 && king_next_y < 8) {
			if (stone_x == king_next_x && stone_y == king_next_y) {
				stone_next_x = stone_x + dx;
				stone_next_y = stone_y + dy;
				if (stone_next_x >= 0 && stone_next_x < 8 && stone_next_y >= 0 && stone_next_y < 8) {
					stone_x = stone_next_x;
					stone_y = stone_next_y;
					king_x = king_next_x;
					king_y = king_next_y;
				}
			}
			else {
				king_x = king_next_x;
				king_y = king_next_y;
			}
		}

		printf("king_next : %d %d / stone_next : %d %d\n", king_x, king_y, stone_x, stone_y);
		printf("%c%c %c%c\n", king_x + 'A', king_y + '1', stone_x + 'A', stone_y + '1');
	}

	printf("%c%c\n", king_x + 'A', king_y + '1');
	printf("%c%c\n", stone_x + 'A', stone_y + '1');

	return;
}

0개의 댓글