2021. 2. 19. 11:07ㆍ알고리즘/파이썬
킹 [1063]
백준 - https://www.acmicpc.net/problem/1063
1063번: 킹
8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는
www.acmicpc.net
문제
-
8*8크기의 체스판에 왕이 하나 있다.
-
킹의 현재 위치가 주어진다.
-
체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는 행을 상징한다.
-
열은 가장 왼쪽 열이 A이고, 가장 오른쪽 열이 H까지 이고, 행은 가장 아래가 1이고 가장 위가 8이다. 예를 들어, 왼쪽 아래 코너는 A1이고, 그 오른쪽 칸은 B1이다.
-
킹은 다음과 같이 움직일 수 있다.
-
R : 한 칸 오른쪽으로
-
L : 한 칸 왼쪽으로
-
B : 한 칸 아래로
-
T : 한 칸 위로
-
RT : 오른쪽 위 대각선으로
-
LT : 왼쪽 위 대각선으로
-
RB : 오른쪽 아래 대각선으로
-
LB : 왼쪽 아래 대각선으로
-
-
체스판에는 돌이 하나 있는데, 돌과 같은 곳으로 이동할 때는, 돌을 킹이 움직인 방향과 같은 방향으로 한 칸 이동시킨다. 아래 그림을 참고하자.
입력으로 킹이 어떻게 움직여야 하는지 주어진다. 입력으로 주어진 대로 움직여서 킹이나 돌이 체스판 밖으로 나갈 경우에는 그 이동은 건너 뛰고 다음 이동을 한다.
킹과 돌의 마지막 위치를 구하는 프로그램을 작성하시오.
입력
-
첫째 줄에 킹의 위치, 돌의 위치, 움직이는 횟수 N이 주어진다.
-
둘째 줄부터 N개의 줄에는 킹이 어떻게 움직여야 하는지 주어진다.
-
N은 50보다 작거나 같은 자연수이고, 움직이는 정보는 위에 쓰여 있는 8가지 중 하나이다.
출력
-
첫째 줄에 킹의 마지막 위치, 둘째 줄에 돌의 마지막 위치를 출력한다.
풀이과정
-
가장먼저 움직임에 따라 이동을 함수로 지정해주었다. 추가적으로 이동을 취소한 것 또한 함수로 지정
-
움직임 함수를 쓰기 위해서는 'A1'를 '11' 로 바꾸는 과정이 필요하다.
-
그러기위한 'col' 리스트이다.
-
-
킹의 움직임 이후 돌과 겹치거나 체스판 밖으로 나가는 경우 cancel_mov로 행햇던 mov를 돌린다.
느낀점
-
움직임에 함수를 지정하는 것에 거부감은 없었지만 굳이 움직임을 취소하는 것을 넣어야하는가라는 의문이 든다.
-
A1 를 11 로 바꾸는것 11을 A1 를 바꾸는 과정이 번거롭다. 이과정들을 거치지 않고 푸는 방법이 더 간단하지 않을까 생각한다.
-
움직임 함수를 쓰는 것또한 움직이고 판단하는 거기 때문에 미리 판단한다면 메모리적,시간적으로 이득이 될지는 모르겠지만 그쪽이 더 절약하는 것으로 보인다.
'알고리즘 > 파이썬' 카테고리의 다른 글
막대기 [1094] (0) | 2021.02.19 |
---|---|
평행사변형 [1064] (0) | 2021.02.19 |
전국 대학생 프로그래밍 대회 동아리 연합 [5046] (0) | 2021.02.10 |
체스판 다시 칠하기 [1018] (0) | 2021.02.10 |
다리놓기 [1010] (0) | 2021.02.10 |