[HackerRank] Queen's Attack II

1012 단어 hackerrankhackerrank

[문제 링크]

[입력]

int n: 보드의 가로 , 세로 길이
int k: 보드의 장애물의 개수
int r_q: 보드 내 퀸의 행의 위치
int c_q: 보드 내 퀸의 열의 위치
int obstacles[k][2]: 장애물의 위치를 담은 2차원 배열, 각 원소에는 [행,열] 로 존재함.

[출력]

int: 퀸이 공격할 수 있는 칸의 개수

[해결 아이디어]

퀸이 움직일 수 있는 방향은 상,하,좌,우,우상,우하,좌상,좌하 총 8개이다.
따라서 각 방향에 따라 퀸의 위치가 보드 밖을 나가지 않거나 장애물의 위치에 걸리지 않으면 결과값을 1씩 더한다.

[코드]

if n==0:
        return 0
    obstacles =set([tuple(item) for item in obstacles])
    
    move_q=[(1,0),(-1,0),(0,1),(0,-1),(1,1),(-1,-1),(1,-1),(-1,1)]
    count=0
    for u,v in move_q:
        cur=(r_q+u,c_q+v)
        while 1<=cur[0]<=n and 1<=cur[1]<=n and cur not in obstacles:
            cur=(cur[0]+u,cur[1]+v)
            count+=1
    return count

좋은 웹페이지 즐겨찾기