Algorithm Problems

[Cos Pro 1급] 3차 3번 - 비숍

WakaraNai 2021. 2. 2. 00:36
728x90
반응형

문제3

체스에서 비숍(Bishop)은 아래 그림과 같이 대각선 방향으로 몇 칸이든 한 번에 이동할 수 있습니다. 만약, 한 번에 이동 가능한 칸에 체스 말이 놓여있다면 그 체스 말을 잡을 수 있습니다.

 

8 x 8 크기의 체스판 위에 여러 개의 비숍(Bishop)이 놓여있습니다. 이 때, 비숍(Bishop)들에게 한 번에 잡히지 않도록 새로운 말을 놓을 수 있는 빈칸의 개수를 구하려고 합니다.

 

옆의 그림에서 원이 그려진 칸은 비숍에게 한 번에 잡히는 칸들이며, 따라서 체스 말을 놓을 수 있는 빈칸 개수는 50개입니다.

 

8 x 8 체스판에 놓인 비숍의 위치 bishops가 매개변수로 주어질 때,

비숍에게 한 번에 잡히지 않도록 새로운 체스 말을 놓을 수 있는 빈칸 개수를 return 하도록 solution 함수를 완성해주세요.

 

 

매개변수 설명

체스판에 놓인 비숍의 위치 bishopssolution 함수의 매개변수로 주어집니다.

* bishops비숍의 위치가 문자열 형태로 들어있는 리스트입니다.

* bishops의 길이는 1 이상 64 이하입니다.

* 비숍이 놓인 위치는 알파벳 대문자와 숫자로 표기합니다.

     * 알파벳 대문자는 가로 방향, 숫자는 세로 방향 좌표를 나타냅니다.

     * 예를 들어 위 그림에서 비숍이 있는 칸은 "D5"라고 표현합니다.

* 한 칸에 여러 비숍이 놓이거나, 잘못된 위치가 주어지는 경우는 없습니다.

 

return 설명

비숍에게 한 번에 잡히지 않도록 새로운 체스 말을 놓을 수 있는 빈칸의 개수를 return 해주세요.

 

예시

bishops

return

 ["D5"]

 ["D5", "E8", "G2"]

50

42

 

 

Python

def toInt(piece):#ASCII~A=65
    return ord(piece[0])-(65-1), int(piece[1])

def move(bishop):
    coord = set()
    x,y = toInt(bishop)
    bUp, bDown = y-x, y+x
    #y=x+b -> b=y-x
    #y=-x+b -> b=y+x

    for i in range(1,9):
        if not( bUp+i > 8 or bDown-i > 8):
            coord.add( (i, bUp+i) )
            coord.add( (i, bDown-i) )
    return coord

def solution(bishops):
    coord = set([ toInt(b) for b in bishops ])
    for bishop in bishops:
        coord |= move(bishop) #union 합집합

    return 64-len(coord)

print(solution(["D5"]))
print(solution(["D5","E8","G2"]))

 

 

+)

www.acmicpc.net/problem/9204

 

9204번: 체스

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 시작 위치 X와 도착 위치 Y가 주어진다. 각 위치는 두 글자가 공백으로 구분되어져 있다. 글자는 열,

www.acmicpc.net

www.acmicpc.net/problem/2570

 

2570번: 비숍2

서양장기인 체스에는 대각선 방향으로 움직일 수 있는 비숍(bishop)이 있다. < 그림 1 >과 같이 크기가 5인 정사각형 체스판 위에 B라고 표시된 곳에 비숍이 있을 때 비숍은 대각선 방향으로 움직여

www.acmicpc.net

 

728x90
반응형