1/4 Coding Test

김태준·2024년 1월 5일
0

Coding Test - BOJ

목록 보기
43/64
post-thumbnail

코딩 테스트 대비 알고리즘 문제 풀이.

✅ Coding Test

🎈 1063 킹

https://www.acmicpc.net/problem/1063

8x8 크기의 체스판에 왕의 위치, 돌의 위치, 왕이 이동할 횟수 N과 방향이 주어지고 N번 이동한 이후의 왕의 위치와 돌의 위치를 출력하는 구현 문제.

왕이 이동하는 방향은 총 8개이고 왕이 이동하는 위치에 돌이 있으면 왕이 이동한 방향과 동일하게 돌도 이동시켜준다.

왕은 다음과 같이 움직일 수 있다.

  • R : 한 칸 오른쪽으로
  • L : 한 칸 왼쪽으로
  • B : 한 칸 아래로
  • T : 한 칸 위로
  • RT : 오른쪽 위 대각선으로
  • LT : 왼쪽 위 대각선으로
  • RB : 오른쪽 아래 대각선으로
  • LB : 왼쪽 아래 대각선으로
import sys
input = sys.stdin.readline

king, rock, n = input().split()
king_x = int(ord(king[0]) - 64)
king_y = int(king[1])
rock_x = int(ord(rock[0]) - 64)
rock_y = int(rock[1])
move = {'R':[1,0], 'L':[-1,0], 'B':[0,-1], 'T':[0,1], 'RT':[1,1], 'LT':[-1,1], 'RB':[1,-1], 'LB':[-1,-1]}

for i in range(int(n)):
    dir = input().rstrip()
    kx = king_x + move[dir][0]
    ky = king_y + move[dir][1]
    if 0<kx<9 and 0<ky<9:
        if kx == rock_x and ky == rock_y:
            rx = rock_x + move[dir][0]
            ry = rock_y + move[dir][1]
            if 0<rx<9 and 0<ry<9:
                king_x, king_y = kx, ky
                rock_x, rock_y = rx, ry
        else:
            king_x, king_y = kx, ky
    else:
        continue

print(chr(king_x+64) + str(king_y))
print(chr(rock_x+64) + str(rock_y))

< 코드 해설 >

  1. 왕과 돌이 입력받는 위치는 A2 B5와 같이 문자와 숫자의 조합이기에 문자들은 ord를 활용해 숫자로 변환한 후 X로 위치를 저장하고 y는 숫자 그대로 저장해준다.

  2. move 변수로 이동할 수 있는 방향들을 딕셔너리 형태로 저장한다.

  3. n번 이동하는 동안 왕과 돌이 주어진 범위 내에서만 이동할 수 있도록 구현해준다.

  4. 이 문제의 핵심은 기존과 다른 그래프 중심의 위치이므로 상하좌우 이동 시 방향을 지정해줘야 한다.

  5. 최종적으로 chr로 숫자를 문자로 변환하여 왕, 돌의 위치를 출력한다.

profile
To be a DataScientist

0개의 댓글