https://www.youtube.com/watch?v=D6fva0YIfNs&list=PLnp1rUgG4UVbZ9t778bKYSH9G5UhllEIE&index=7
※ 프로그램 구현문제
□ 문제설명
체스에서 나이트(knight)는 아래 그림과 같이 동그라미로 표시된 8개의 방향중 한 곳으로 한 번에 이동이 가능합니다.
단, 나이트는 체스판 밖으로는 이동할 수 없습니다.
체스판의 각 칸의 위치는 다음과 같이 표기합니다.
예를 들어, A번줄과 1번줄이 겹치는 부분은 'A1'이라고 합니다.
나이트의 위치 pos가 매개변수로 주어질 때, 나이트를 한 번 움직여서 이동할 수 있는 칸은 몇개인지 return 하도록 solution 함수를 완성해주세요.
□ 매개변수 설명
나이트의 위치 pos가 solution 함수의 매개변수로 주어집니다.
- pos는 A부터 H까지의 대문자 알파벳 하나와 1 이상 8이하의 정수 하나로 이루어진 두 글자 문자열입니다.
- 잘못된 위치가 주어지는 경우는 없습니다.
□ return 값 설명
나이트를 한 번 움직여서 이동할 수 있는 칸의 개수를 return 해주세요.
□ 예시
pos | return |
"A7" | 3 |
□ 예시설명
나이트가 A7 위치에 있으면 아래 그림과 같이 왼쪽으로는 이동하지 못하고, 오른쪽으로는 맨 위를 제외한 나머지 세 칸으로 이동 가능합니다.
따라서, 3을 return 하면 됩니다.
※ 문제 접근 방식
(1) pos를 쪼겝니다.
(2) 각각 행과 열을 구해서 위치값을 나눕니다
(3) 현재 위치 pos를 기준으로 x - 2 y - 1, x - 2 y +1, x - 1 y - 2, x - 1 y + 2, y - 2 x - 1, y - 2 x + 1, y - 1 x - 2, y - 1 x + 2이 체스판 범위에 있는지 구해줍니다.
#A~H까지로 표기된 좌표를 1~8로 변경해주자
def find_position(pos) :
pos_dic = {
"A":1,
"B":2,
"C":3,
"D":4,
"E":5,
"F":6,
"G":7,
"H":8
}
return [pos_dic[pos[0]], int(pos[1])]
def solution(pos):
dx = [2, 1, -1, -2, -2, -1, 1, 2] #시계방향으로 돈다
dy = [1, 2, 2, 1, -1, -2, -2, -1] #위 증가, 아래 감소, 오른쪽 증가, 왼쪽 감소
count = 0
start_x, start_y = find_position(pos) #A~H까지로 표기된 좌표를 1~8로 변경해주자
for d in range(8) :
next_x = start_x + dx[d] #8방향 돌면서 좌표 찾기
next_y = start_y + dy[d]
print(next_x, next_y)
if 0 < next_x <= 8 and 0 < next_y <= 8 : #범위 안에 있는것만 찾기
count += 1
return count
pos = "A7"
ret = solution(pos)
print("Solution: return value of the function is", ret, ".")
'코테풀이 > 구현' 카테고리의 다른 글
[Cos Pro 1급] 3회 문제 5(전광판 어플, 한칸씩 밀기) (0) | 2022.05.23 |
---|---|
[Cos Pro 1급] 3회 문제 3(비숍 대각선 이동 위치이동) (0) | 2022.05.23 |
1954. 달팽이 숫자(달팽이, 소용돌이) (0) | 2022.05.19 |
[프로그래머스 | 2단계] [3차] 방금그곡 (0) | 2022.05.03 |
[프로그래머스 | 2단계] 방문 길이(이차원리스트 상하좌우 이동) (0) | 2022.04.21 |