티스토리 뷰
[Silver III] 킹 - 1063
성능 요약
메모리: 30840 KB, 시간: 80 ms
분류
구현(implementation), 시뮬레이션(simulation)
문제 설명
8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는 행을 상징한다. 열은 가장 왼쪽 열이 A이고, 가장 오른쪽 열이 H까지 이고, 행은 가장 아래가 1이고 가장 위가 8이다. 예를 들어, 왼쪽 아래 코너는 A1이고, 그 오른쪽 칸은 B1이다.
킹은 다음과 같이 움직일 수 있다.
- R : 한 칸 오른쪽으로
- L : 한 칸 왼쪽으로
- B : 한 칸 아래로
- T : 한 칸 위로
- RT : 오른쪽 위 대각선으로
- LT : 왼쪽 위 대각선으로
- RB : 오른쪽 아래 대각선으로
- LB : 왼쪽 아래 대각선으로
체스판에는 돌이 하나 있는데, 돌과 같은 곳으로 이동할 때는, 돌을 킹이 움직인 방향과 같은 방향으로 한 칸 이동시킨다. 아래 그림을 참고하자.
입력으로 킹이 어떻게 움직여야 하는지 주어진다. 입력으로 주어진 대로 움직여서 킹이나 돌이 체스판 밖으로 나갈 경우에는 그 이동은 건너 뛰고 다음 이동을 한다.
킹과 돌의 마지막 위치를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 킹의 위치, 돌의 위치, 움직이는 횟수 N이 주어진다. 둘째 줄부터 N개의 줄에는 킹이 어떻게 움직여야 하는지 주어진다. N은 50보다 작거나 같은 자연수이고, 움직이는 정보는 위에 쓰여 있는 8가지 중 하나이다.
출력
첫째 줄에 킹의 마지막 위치, 둘째 줄에 돌의 마지막 위치를 출력한다.
"""
*packageName :
* fileName : 1063_백준_킹_S3
* author : ipeac
* date : 2022-07-27
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2022-07-27 ipeac 최초 생성
"""
king_position, stone_position, n = input().split()
king_position = list(map(int, [king_position[1], ord(king_position[0]) - 64]))
stone_position = list(map(int, [stone_position[1], ord(stone_position[0]) - 64]))
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]}
n = int(n)
king_move_arr = [input() for _ in range(n)]
def move_def(value):
# 행 열 이동
nx, ny = king_position[0] + move[value][0], king_position[1] + move[value][1]
if 1 <= nx <= 8 and 1 <= ny <= 8:
# 돌의 위치와 동일하다면 돌을 킹이 움직인 방향과 같이 맞춤
if nx == stone_position[0] and ny == stone_position[1]:
# 돌의 포지션 체크
nx_stone, ny_stone = stone_position[0] + move[value][0], stone_position[1] + move[value][1]
if 1 <= nx_stone <= 8 and 1 <= ny_stone <= 8:
king_position[0], king_position[1] = nx, ny
stone_position[0], stone_position[1] = nx_stone, ny_stone
# 킹만 고려함
else:
king_position[0], king_position[1] = nx, ny
for value in king_move_arr:
move_def(value)
print(chr(king_position[1] + 64) + str(king_position[0]))
print(chr(stone_position[1] + 64) + str(stone_position[0]))
'코딩테스트 > 백준' 카테고리의 다른 글
파이썬 | 백준 13301 _ 타일 장식물 _ S5 (0) | 2022.07.16 |
---|---|
파이썬 | 14502 _ 연구소 _G5 (0) | 2022.07.13 |
파이썬 | 10026 _ 적록색약 _ G5 (0) | 2022.07.12 |
파이썬 | 7576 _ 토마토 _ G5 (0) | 2022.07.11 |
파이썬 | 5014 _ 스타트링크 _ G5 (0) | 2022.07.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 인형뽑기
- 10진수
- 자료표현
- ASCII코드
- java
- 카카오 코딩테스트
- 킹
- 프로그래머스 # 음양더하기
- K번째수
- 알고리즘
- 1063
- 구현
- 브루트포스
- 오
- Git
- solved.ac
- 크레인 인형뽑기 게임
- 자료구조
- 프로그래머스
- stack
- 백준
- 코딩테스트
- 2진수
- 2019 카카오 개발자 겨울 인턴십
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함