알고리즘 공부/파이썬(Python)

백준 1063번 킹 파이썬

마달랭 2024. 6. 29. 23:08
반응형

리뷰

다른 구현문제에 비해 쉬웠다. 괜히 정답률이 40% 이상 되는게 아닌가 보다.

문제 풀이

  1. 방향 이동에 대하여 딕셔너리로 구현해 주었다.
  2. 왕과 돌의 초기 좌표를 ord와 int를 통해 정수값으로 각각 초기화 해줬다.
  3. 각 이동이 진행될때 이동 후 왕의 좌표를 초기화 해주고 해당 좌표가 돌이랑 같을 경우 즉, 돌을 밀어내야 할 경우 이동 후 돌의 좌표를 받아왔다.
  4. 돌의 좌표가 체스판을 벗어나지 않을 경우 돌을 이동 시키고 왕의 좌표를 이동 전 돌의 좌표로 설정해 준다.
  5. 돌을 만나지 않았을 경우 왕이 이동할 좌표가 체스판 밖이 아니라면 왕을 해당 위치로 이동시켰다.
  6. 이동 작업이 끝난 후 chr와 str을 통해 좌표를 문자열로 변환 후 출력해 주었다.

참고 사항

없음

정답 코드

def q1063():
    # 백준 1063번 킹 파이썬
    k, r, n = input().split()
    dic = {'R': (1, 0), 'L': (-1, 0), 'B': (0, -1), 'T': (0, 1),
           'RT': (1, 1), 'LT': (-1, 1), 'RB': (1, -1), 'LB': (-1, -1)}
    k_pos = [(ord(k[0]) - 64), int(k[1])]
    r_pos = [(ord(r[0]) - 64), int(r[1])]
    for _ in range(int(n)):
        d = input()
        next_k_pos = [k_pos[0] + dic[d][0], k_pos[1] + dic[d][1]]
        if next_k_pos == r_pos:
            next_r_pos = [r_pos[0] + dic[d][0], r_pos[1] + dic[d][1]]
            if 1 <= next_r_pos[0] <= 8 and 1 <= next_r_pos[1] <= 8:
                k_pos = r_pos
                r_pos = next_r_pos
        elif 1 <= next_k_pos[0] <= 8 and 1 <= next_k_pos[1] <= 8:
            k_pos = next_k_pos
    print(chr(k_pos[0] + 64) + str(k_pos[1]))
    print(chr(r_pos[0] + 64) + str(r_pos[1]))
q1063()

 

728x90
반응형