킹 [1063]

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