매일공부

[코딩테스트 python] 왕실의 나이트; 문자를 int로 변경[ord] 본문

Programming/코딩테스트

[코딩테스트 python] 왕실의 나이트; 문자를 int로 변경[ord]

aram 2023. 5. 2. 17:44

 

출처 [저서] : 이것이 취업을 위한 코딩테스트다 with 파이썬

 

# 문제

나이트 이동 가능한 방향
- 수평 2칸 > 수직 1칸
- 수직 2칸 > 수평 1칸

현 좌표가 주어졌을 때 나이트가 이동가능한 경우의 수는?
x : a~h
y : 1~8

 

# 풀이

1. 나이트가 이동가능한 좌표 정의

steps = [(-1,2), (1, 2), (-1,-2), (1, -2), (-2, 1), (-2, -1), (2, 1), (2, -1)]

2. x 좌표의 연속된 알파벳 > int 변환

  1) x의 알파벳을 수작업으로 정의 후 인덱스를 활용하여 변환

x_list = ['a','b','c','d','e','f','g','h']
now = list(map(int, [x_list.index(xy[0])+1, xy[1]]))

  2) 교재 = 유니코드(ord) 활용 
   : (현재 위치의 알파벳 유니코드) - (첫 시작위치인 'a'의 유니코드 97) + 1

now = [int(ord(xy[0]))-int(ord('a'))+1, int(xy[1])]

  > 확실히 유니코드 사용은 익숙하지 않아서 생각조차 못 함 👍
  > 훨씬 간결하고, 연속된 문자라면 어디서든 활용 가능하니 꼭 기억!! ⭐⭐

3. 현재위치에서 이동가능한 모든 나이트의 위치 찾기

cnt = 0
for step in steps:
    x = now[0] + step[0]
    y = now[1] + step[1]
    if x>0 and y>0 and x<9 and y<9: # 모두 (0 <x, y< 9)면 이동 가능한 위치
        cnt += 1

 > 단, x y의 범위를 넘어가면 이동 불가. 이 부분 check 필수

 

[참고]
유니코드를 문자열로 변경 : chr()

 

Comments