[이코테] 구현-왕실의 나이트

Lim seung hyun·2021년 6월 11일
0
post-thumbnail

이것이 코딩 테스트다 Ch04 구현 실전 문제

4-2 왕실의 나이트

문제 설명

왕실 정원은 체스판과 같은 8 x 8 좌표 평면이다.
나이트가 특정한 한 칸에 서 있을 때 나이트가 이동할 수 있는 경우의 수를 구하라
나이트는 L자 형태로만 이동할 수 있으며, 정원(map) 밖으로 벗어날 수 없다.
1. 수평 두 칸 이동 후 수직 한 칸 이동
2. 수직 두 칸 이동 후 수평 한 칸 이동

Input

loc -> str : 나이트가 현재 위치한 곳의 좌표, 두 문자로 구성 ex) a1

Output

cnt -> int : 나이트가 이동할 수 있는 경우의 수

Limit

time : 1 second
memory : 128 MB

구현 코드

Analysis

시간복잡도 : O(1)
공간복잡도 : O(1)

def solve(loc):
    # 나이트가 맵 안에서 L자로 이동할 수 있는 좌표의 수 구하기
    cnt = 0
    limit = 8
    x, y = ord(loc[0]) - ord("a"), int(loc[1]) - 1
    steps = [
    	[-1, 2], [2, -1], [-1, -2], [-2, -1], 
    	[1, 2], [2, 1], [1, -2], [-2, 1]
        ]

    # 이동 가능한 8방위의 좌표로 이동했을 때 맵을 벗어나지 않는다면 카운트
    for dx, dy in steps:
        if (0 <= x + dx < limit) and (0 <= y + dy < limit):
            cnt += 1
    return cnt

테스트 코드

class testSolve(unittest.TestCase):
    def testcase(self):
        self.assertEqual(solve("a1"), 2)


unittest.main()
profile
I love to make my own things!!

0개의 댓글