[파이썬] 이코테 - 구현, 왕실의 나이트(실전문제)

김지현·2021년 7월 19일
0

구현 (Implementation)

  • 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정

✔문제
왕실 정원은 8x8 좌표 평면이다. 나이트는 L자 형태로만 이동할 수 있다.(1.수평으로 두 칸 이동 후 수직으로 한 칸 2. 수직으로 두 칸 이동 후 수평으로 한 칸) 좌표 평면상에서 나이트의 위치가 주어졌을 때 이동할 수 있는 경우의 수를 출력해라. 이때 행은 1~8, 열을 a~h로 표현한다.

ex. a1 -> 2


[답안 예시]

n = input()
row = int(n[1]) #열
column = int(ord(n[0])) - int(ord('a')) + 1 #ord unicode, 행

#경우의 수 
steps = [(2,1),(2,-1),(-2,1),(-2,-1),(1,2),(1,-2),(-1,2),(-1,-2)]
result = 0

for step in steps:
    next_row = row + step[0]
    next_column = column + step[1]
    
    if next_row >=1 and next_row<=8 and next_column>=1 and next_column<=8:
        result += 1
        
print(result)

📌

  • 경우의 수 문제에서 steps =[] 형태로 경우의 수를 나타내고, 반복문을 사용할 수 있다.
  • a1형태로 받으므로 문자와 수를 구분해주는 작업이 필요하다.
  • column = int(ord([0])) - int(ord('a')) + 1

    ord()는 하나의 문자에 대한 아스키 코드거 정수 값을 반환
    열변수는 가로축 인덱스를 의미하는데 가로축은 a부터 h까지 존재하므로, 인덱스값을 계산하기 위해 'a'의 아스키코드 값만큼 빼주는 것(인덱스 값을 0으로 맞춰준다고 이해!) 그러나 이 문제에서는 인덱스가 1부터 출발하므로 추가적으로 1을 더해준것

@이것이 코딩 테스트다 with 파이썬

profile
Programmer & Media

0개의 댓글