초보 개발자의 일기
4-3 왕실의 나이트 본문
728x90
문제
내 코드
# 나이트는 앞으로 두칸이동후 수직으로 한칸 이동가능
# 8*8좌표평면이 있을때 나이트가 n에 있을때 이동가능한 경우의 수는?
# 행과 열로 구성된 좌표 평면
# 갈수있는 경우의 수 2,1 2,-1 -2,1 -2,-1 -1,-2 1,-2 -1,2 1,2 총 8개 행, 열
# 아스키코드 반환 ord("A") 숫자에 맞는 아스키코드 반환 chr(65)
n=input()
row=int(ord(n[0]))-int(ord("a"))+1
column=int(n[1])
result=0
dx=[2,2,-2,-2,-1,1,-1,1]
dy=[1,-1,1,-1,-2,-2,2,2]
for i in range(len(dx)):
nx=row+dx[i]
ny=column+dy[i]
if nx>=1 and nx<=8 and ny<=8 and ny>=1:
result+=1
print(result)
답안
# 현재 나이트의 위치 입력받기
input_data = input()
row = int(input_data[1])
column = int(ord(input_data[0])) - int(ord('a')) + 1
# 나이트가 이동할 수 있는 8가지 방향 정의
steps = [(-2, -1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1)]
# 8가지 방향에 대하여 각 위치로 이동이 가능한지 확인
result = 0
for step in steps:
# 이동하고자 하는 위치 확인
next_row = row + step[0]
next_column = column + step[1]
# 해당 위치로 이동이 가능하다면 카운트 증가
if next_row >= 1 and next_row <= 8 and next_column >= 1 and next_column <= 8:
result += 1
print(result)
해결법
전에 푼 4-1 상하좌우 문제처럼 똑같은 방식으로 문제를 풀었다.
근데 이번엔 좌표가 1,1이 아닌 a,1처럼 나와서 처음에 어떻게 변환할지 몰랐다.
구글링 결과 ord로 아스키코드로 변환을 하고 첫 행이 a이므로 변환 값에 a를 빼준다음 +1을 해주어 행의 위치를 구했다.
4-1 문제를 풀고 이 문제를 푸니 그렇게 어렵지 않았다.
내 해결법과 다르게 책의 답안은 steps이라는 리스트에 모든 경우의 수를 저장해 리스트에서 값을 꺼내 사용하는 방식으로 문제를 풀었다.
이렇게도 한번 풀어봐야겠다.
느낀점
ord와 chr의 사용법을 알았다.
아스키코드 반환 ord("A") 숫자에 맞는 아스키코드 반환 chr(65)
728x90
'코딩테스트 > 이것이 코딩테스트다.(Python)' 카테고리의 다른 글
선택 정렬, 삽입 정렬 (2) | 2022.06.25 |
---|---|
5-4 미로 탈출 (2) | 2022.06.04 |
5-3 음료수 얼려먹기 (2) | 2022.06.04 |
4-4 게임 개발 (1) | 2022.06.03 |
4-1 상하좌우 (1) | 2022.05.31 |