본문 바로가기
CS/알고리즘

백준 1063 킹(시뮬)_String

by zieunee 2020. 5. 6.
반응형

https://www.acmicpc.net/problem/1063

 

1063번: 킹

8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는 행을 상징한다. 열은 가장 왼쪽 열이 A이고, 가장 오른쪽 열이 H까지 이고, 행은 가장 아래가 1이고 가장 위가 8이다. 예를 들어, 왼쪽 아래 코너는 A1이고, 그 오른쪽 칸은 B1이다. 킹은 다음과 같이 움직일 수 있다. R : 한 칸 오른쪽으로 L : 한 칸

www.acmicpc.net

String 은 어렵다

 

//1063
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string.h>
#include<vector>
using namespace std;

int kc, sc, kr, sr, N;
char c;
char a;
char arr[51][3];
int dy[4] = { 1,0,-1,0 };
int dx[4] = { 0,-1,0,1 };
int rex, rey, resx, resy;
int dirFlag;
//strcmp
void move(int kx, int ky, int sx, int sy, int num) {
	int nx = kx; int ny = ky; int snx = sx; int sny = sy;
	rex = kx, rey = ky, resx = sx, resy = sy;
	if (strcmp(arr[num], "R") == 0) {
		nx = kx + dx[0];
		ny = ky + dy[0];
		if (nx == sx && ny == sy) {
			snx = sx + dx[0];
			sny = sy + dy[0];
		}
	}
	else if (strcmp(arr[num], "L") == 0) {
		nx = kx + dx[2];
		ny = ky + dy[2];
		if (nx == sx && ny == sy) {
			snx = sx + dx[2];
			sny = sy + dy[2];
		}
	}
	else if (strcmp(arr[num], "B") == 0) {
		nx = kx + dx[1];
		ny = ky + dy[1];
		if (nx == sx && ny == sy) {
			snx = sx + dx[1];
			sny = sy + dy[1];
		}
	}
	else if (strcmp(arr[num], "T") == 0) {
		nx = kx + dx[3];
		ny = ky + dy[3];
		if (nx == sx && ny == sy) {
			snx = sx + dx[3];
			sny = sy + dy[3];
		}
	}
	else if (strcmp(arr[num], "RT") == 0) { //동북
		nx = kx + dx[0] + dx[3];
		ny = ky + dy[0] + dy[3];
		if (nx == sx && ny == sy) {
			snx = sx + dx[0] + dx[3];
			sny = sy + dy[0] + dy[3];
		}

	}
	else if (strcmp(arr[num], "LT") == 0) { // 서북
		nx = kx + dx[2] + dx[3];
		ny = ky + dy[2] + dy[3];
		if (nx == sx && ny == sy) {
			snx = sx + dx[2] + dx[3];
			sny = sy + dy[2] + dy[3];
		}

	}
	else if (strcmp(arr[num], "RB") == 0) {//동남
		nx = kx + dx[0] + dx[1];
		ny = ky + dy[0] + dy[1];
		if (nx == sx && ny == sy) {
			snx = sx + dx[0] + dx[1];
			sny = sy + dy[0] + dy[1];
		}

	}
	else if (strcmp(arr[num], "LB") == 0) {//서남
		nx = kx + dx[2] + dx[1];
		ny = ky + dy[2] + dy[1];
		if (nx == sx && ny == sy) {
			snx = sx + dx[2] + dx[1];
			sny = sy + dy[2] + dy[1];
		}

	}


	if (nx <= 0 || ny <= 0 || nx > 8 || ny > 8 || snx <= 0 || sny <= 0 || snx > 8 || sny > 8) {
		nx = kx; ny = ky;
		snx = sx, sny = sy;
	}

	resx = snx; resy = sny;
	rex = nx; rey = ny;

}
int main() {

	scanf("%c", &c);
	kc = c - 'A'+1;
	scanf("%1d", &kr);
	kr = kr;
	scanf(" %c", &c);
	sc = c - 'A'+1;
	scanf("%1d", &sr);
	sr =  sr ;
	scanf("%d", &N);
	for (int i = 0; i < N; i++) {
		scanf("%s", &arr[i]);
	}

	rex = kr; rey = kc;
	resx = sr, resy = sc;
	for (int i = 0; i < N; i++) {
		move(rex, rey, resx, resy, i);
	}

	char aa = rey-1 + 'A';
	char bb = resy-1 + 'A';


	printf("%c", aa);
	printf("%d", rex);
	printf("\n");
	printf("%c", bb);
	printf("%d", resx);





}

 

반응형