문제링크 :https://www.acmicpc.net/problem/1063
문제설명
1. 체스판에 돌의 위치와 킹의 위치가주어진다.
2. 킹이 움직일 위치에 돌이 있으면 돌을 같은 방향으로 밀어낸다.
3. 만약 킹이 움직이거나 돌이 움직일때 체스판 밖으로 나가게 되는 경우에는 움직이지 않고 넘어간다.
4. 킹의 움직임이 주어졌을때 마지막에 킹과 돌의 위치를 출력.
알고리즘
1. 명령에 따라 움직이는 방향함수를 정의 해주고.
2. 킹이 움직일수 있다(경계를 벗어나지 않는다)면 -> 그위치에 돌이 있다면 돌이 움직일 수있는지 확인하여 돌이움직 일 수 있다면 킹과 돌을 움직인다.
3. 킹이 움직일 위치에 돌이없다면 킹을 움직인다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | #include<iostream> using namespace std; int map[9][9]; int dy[8] = { 1,1,0,-1,-1,-1,0,1 }; int dx[8] = { 0,1,1,1,0,-1,-1,-1 }; int arrow(string str) { if (str == "T") { return 0; } else if (str == "RT") { return 1; } else if (str == "R") { return 2; } else if (str == "RB") { return 3; } else if (str == "B") { return 4; } else if (str == "LB") { return 5; } else if (str == "L") { return 6; } else if (str == "LT") { return 7; } } int main() { cin.tie(NULL); ios::sync_with_stdio(false); char c; int a; //킹 위치 cin >> c >> a; pair<char, int> king = make_pair(c, a); //돌 위치 cin >> c >> a; pair<char, int> stone = make_pair(c, a); int N; cin >> N; //이동 입력. string str; for (int i = 0; i < N; i++) { cin >> str; int num = arrow(str); pair<char, int> P; int s1; int s2; s1 = king.first - 'A'; s2 = king.second; s1 = s1 + dx[num]; s2 = s2 + dy[num]; //킹이 체스판을 나가면 움직이지 않는다. if (s1 < 0 || s1 >= 8 || s2 < 1 || s2 > 8)continue; P = make_pair(king.first + dx[num], king.second + dy[num]); //킹 자리에 돌이 있었으면 if (P == stone) { s1 = stone.first - 'A'; s2 = stone.second; s1 = s1 + dx[num]; s2 = s2 + dy[num]; //돌이 체스판을 나가면 움직이지않는다. if (s1 < 0 || s1 >= 8 || s2 < 1 || s2 > 8)continue; else { stone = make_pair(stone.first + dx[num], stone.second + dy[num]); } } king = P; } cout << king.first << king.second << "\n"; cout << stone.first << stone.second << "\n"; } | cs |
'c++ > 백준' 카테고리의 다른 글
백준 10942번 : 팰린드롬? (0) | 2020.05.26 |
---|---|
백준 1213번 : 팰린드롬 만들기 (0) | 2020.05.26 |
백준 1004번 : 어린 왕자 (0) | 2020.05.26 |
백준 2790번 : F7 (0) | 2020.05.26 |
백준 10282번 : 해킹 (0) | 2020.05.22 |