BOJ - 1063

주의·2024년 1월 18일
0

boj

목록 보기
96/214

백준 문제 링크

❓접근법

  1. king과 stone의 좌표를 각각 나타내준다.
    A1이면 [1,1]로, A2이면 [1,2]로
  2. 갈 수 있는 8방향을 steps에 딕셔너리 형태로 넣어주었다.
    만약 방향이 B라면, 즉 아래로 간다면 A1일 때 [1,0]으로 이동한다.
  3. king의 다음 좌표를 king_delta에, stone의 다음 좌표를 stone_delta에 넣고
  • king_delta가 범위 안에 있을 때
    • king_delta와 stone이 같을 때 ( king이 가야할 다음 자리에 stone이 있다면)
      • stone_delta가 범위 안에 있다면 -> king, stone 모두 자리를 한칸씩 이동함
        king = king_delta로 변경
        stone = stone_delta로 변경
    • king_delta와 stone이 다르다면 -> king만 이동
      king = king_delta로 변경
    1. 마지막으로 king과 stone의 좌표를 문제에서 요구하는 형식대로 출력하면 끝!

👌🏻코드

king, stone, N = input().split()

king = [ord(king[0]) - ord("A") + 1, int(king[1])]
stone = [ord(stone[0]) - ord("A") + 1, int(stone[1])]

steps = {'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 _ in range(int(N)):
    step = input()
    king_delta = [king[0] + steps[step][0], king[1] + steps[step][1]] # king의 다음 좌표
    stone_delta = [stone[0] + steps[step][0], stone[1] + steps[step][1]] # stone의 다음 좌표
    
    if 1 <= king_delta[0] <= 8 and 1 <= king_delta[1] <= 8:
        if king_delta == stone: # king의 다음 위치에 돌이 있을 때
            if 1 <= stone_delta[0] <= 8 and 1 <= stone_delta[1] <= 8:
                king = king_delta
                stone = stone_delta
        else: # king의 다음 위치에 돌이 없을 때
            king = king_delta 
                
                
print(chr(king[0] + ord('A') - 1) + str(int(king[1])))
print(chr(stone[0] + ord('A') - 1) + str(int(stone[1])))

0개의 댓글