https://www.youtube.com/watch?v=wtmIATeaeG4&list=PLnp1rUgG4UVb_5oT4tYaB4Sro-SBPJSWy&index=4
Cos Pro 1급 3회 문제 3 - 구현
체스에서 비숍(Bishop)은 아래 그림과 같이 대각선 방향으로 몇 칸이든 한 번에 이동할 수 있습니다. 만약, 한 번에 이동 가능한 칸에 체스 말이 놓여있다면 그 체스 말을 잡을 수 있습니다.
8 x 8 크기의 체스판 위에 여러 개의 비숍(Bishop)이 놓여있습니다. 이때, 비숍(Bishop)들에게 한 번에 잡히지 않도록 새로운 말을 놓을 수 있는 빈칸의 개수를 구하려고 합니다.
위 그림에서 원이 그려진 칸은 비숍에게 한 번에 잡히는 칸들이며, 따라서 체스 말을 놓을 수 있는 빈칸 개수는 50개입니다.
8 x 8 체스판에 놓인 비숍의 위치 bishops가 매개변수로 주어질 때, 비숍에게 한 번에 잡히지 않도록 새로운 체스 말을 놓을 수 있는 빈칸 개수를 return 하도록 solution 함수를 완성해주세요.
▣ 매개변수 설명
체스판에 놓인 비숍의 위치 bishops가 solution 함수의 매개변수로 주어집니다.
- bishops는 비숍의 위치가 문자열 형태로 들어있는 리스트입니다.
- bishops의 길이는 1 이상 64 이하입니다.
- 비숍이 놓인 위치는 알파벳 대문자와 숫자로 표기합니다.
- 알파벳 대문자는 가로 방향, 숫자는 세로 방향 좌표를 나타냅니다.
- 예를 들어 위 그림에서 비숍이 있는 칸은 "D5"라고 표현합니다.
- 한 칸에 여러 비숍이 놓이거나, 잘못된 위치가 주어지는 경우는 없습니다.
▣ return 값 설명
비숍에게 한 번에 잡히지 않도록 새로운 체스 말을 놓을 수 있는 빈칸의 개수를 return 해주세요.
▣ 예시
| bishops | return |
|--------------------|--------|
| ["D5"] | 50 |
| ["D5", "E8", "G2"] | 42 |
▣ 예시 설명 예시 #1 : 문제에 나온 예시와 같습니다. 예시 #2 :
그림과 같이 원이 그려진 칸은 비숍에게 한 번에 잡히는 칸들이며, 따라서 체스 말을 놓을 수 있는 빈칸 개수는 42개입니다.
문제풀이
대각선 방향 끝까지 갔다가 다시 제자리로 돌아오자
def solution(bishops):
#여기에 코드를 작성해주세요.
maps = [[0]*9 for _ in range(9)]
dyx = [(1, 1), (-1, 1), (1, -1), (-1, -1)]
for bishop in bishops :
start_y = ord(bishop[0]) - ord('A') + 1 #a : 65-1, b : 66-2, c : 67-3, d : 68-4
start_x = int(bishop[1])
maps[start_y][start_x] = 1
for dy, dx in dyx :
next_y, next_x = start_y, start_x #시작값으로 초기화
while True :
next_y += dy
next_x += dx
#1보다 작을때 컷, 8보다 클때 컷
if next_y < 1 or next_y > 8 or next_x < 1 or next_x > 8 :
break
maps[next_y][next_x] = 1
answer = 0
#0으로 계속 남아 있는 부분 체크
for y in range(1, 9) :
for x in range(1, 9) :
if maps[y][x] == 0 :
answer += 1
return answer
bishops1 = ["D5"]
ret1 = solution(bishops1)
print("solution 함수의 반환 값은", ret1, "입니다.")
bishops2 = ["D5", "E8", "G2"]
ret2 = solution(bishops2)
print("solution 함수의 반환 값은", ret2, "입니다.")
'코테풀이 > 구현' 카테고리의 다른 글
[swea | D2] 2001. 파리 퇴치 (0) | 2022.05.23 |
---|---|
[Cos Pro 1급] 3회 문제 5(전광판 어플, 한칸씩 밀기) (0) | 2022.05.23 |
[Cos Pro 1급] 1회 문제 6(체스 나이트 8방향 위치이동) (0) | 2022.05.19 |
1954. 달팽이 숫자(달팽이, 소용돌이) (0) | 2022.05.19 |
[프로그래머스 | 2단계] [3차] 방금그곡 (0) | 2022.05.03 |
[Cos Pro 1급] 3회 문제 3(비숍 대각선 이동 위치이동)