1063 킹
https://www.acmicpc.net/problem/1063
Algorithm
킹이 움직인다. 이때 체크해야할 조건은 다음과 같다.
- 격자 안에서만 움직여야 한다.
- 돌이 있는 곳으로 움직일 경우, 돌과 함께 움직여야 한다.
- 이때 돌 또한 격자 안에서 움직여야 한다.
- 돌이 격자 밖으로 나가는 경우도 체크하되, 이때 킹이 격자 내에서 움직인다면 상관없이 움직인다
Code
# 행: row, 열: col
row = {'8':0, '7':1, '6':2, '5':3, '4':4, '3':5, '2':6, '1':7}
col = {'A':0, 'B':1, 'C':2, 'D':3, 'E':4, 'F':5, 'G':6, 'H':7}
move = {'R':(0,1), 'L':(0,-1), 'B':(1,0), 'T':(-1,0), 'RT':(-1,1), 'LT':(-1,-1), 'RB':(1,1), 'LB':(1,-1)}
king, rock, n = input().split()
n=int(n)
graph = [[0 for _ in range(8)] for _ in range(8)] # 8*8 체스판
king_row, king_col = row[king[1]], col[king[0]]
rock_row, rock_col = row[rock[1]], col[rock[0]]
graph[rock_row][rock_col] = 1
for _ in range(n):
command = input()
r,c = move[command][0], move[command][1]
# 격자 내에서 해결해야한다.
if (0 <= king_row+r < 8 and 0 <= king_col+c < 8):
# king이 rock이랑 같은 방향으로 갈 경우
if (king_row+r == rock_row) and (king_col+c == rock_col):
# 돌이 움직일 수 있다면 (격자 내라면 같이 이동)
if (0 <= rock_row+r < 8 and 0 <= rock_col+c < 8):
rock_row += r
rock_col += c
king_row += r
king_col += c
# 돌이 격자 밖으로 움직이는 경우
else:
continue
else:
king_row += r
king_col += c
king_position=str()
for k,v in col.items():
if v == king_col:
king_position += k
for k,v in row.items():
if v == king_row:
king_position += k
print(king_position)
rock_position=str()
for k,v in col.items():
if v == rock_col:
rock_position += k
for k,v in row.items():
if v == rock_row:
rock_position += k
print(rock_position)
'Koala - 14기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/Python] 2230번 수고르기 (0) | 2024.03.31 |
---|---|
[백준/Python] 2470번 두 용액 (0) | 2024.03.31 |
[백준/C++] 1652번 누울 자리를 찾아라 (0) | 2024.03.31 |
백준 9996번 한국이 그리울 땐 서버에 접속하지 C++ (0) | 2024.03.31 |
[BOJ/C++] 2230 수 고르기 (0) | 2024.03.28 |