-
[이코테 # 구현2] 왕실의 나이트Programming 기초/Coding Test 2023. 6. 6. 22:59
* 왕실의 나이트
n*n 체크판에서 나이트의 현재위치를 입력했을 때 나이트가 움직일 수 있는 경우의 수를 출력한다.
열은 abc로 표시하고 행은 123으로 표시한다. 입력 a2은 2행 1열을 뜻함.
n = input() r = int(n[1]) c = int(ord(n[0])) - (int(ord("a")) - 1) step = [[-1, -2], [1, -2],[-1, 2], [1, 2], [-2, 1], [-2, -1], [2, -1], [2, 1]] # (c,r)상하좌우 count = 0 for i in range(8): step[i][0] += c step[i][1] += r for i in range(8): if step[i][0] >= 1 and step[i][0] <= 8 and step[i][1] >= 1 and step[i][1] <= 8: count += 1 print(count)
시간제한 : 20분
시간내에 못풂. -> 실수를 많이 함.
아이디어: 움직일 수 있는 값에 현 위치를 더해서, 1보다 작거나 8을 초과하는 경우를 제외하고, 이동 가능한 경우를 센다.
행과 열이 계산할 때 헷갈림.
row를 r, column을 c로 적었는데, 풀네임으로 적는 것이 나을 것 같음.
step도 (x,y)좌표로 적는 것이 안 헷갈릴 것.(여기선 딱히 상관 없긴 했다.)
# 제공 답변 약간 변형 n = input() r = int(n[1]) c = int(ord(n[0])) - (int(ord("a")) - 1) step = [[-1, -2], [1, -2],[-1, 2], [1, 2], [-2, 1], [-2, -1], [2, -1], [2, 1]] count = 0 for step in steps: step[0] = step[0] + r step[1] = step[1] + c if step[0] >= 1 and step[0] <= 8 and step[1] >= 1 and step[1] <= 8: count += 1 print(count)
* 2회차
n=input() c=int(ord(n[0]))-int(ord('a'))+1 r=int(n[1]) now=[c,r] count=0 #동쪽위,동쪽아래,서쪽위,서쪽아래,남쪽좌,남쪽우,북쪽좌,북쪽우 arr=[[2,-1],[2,1],[-2,-1],[-2,1],[-1,2],[1,2],[-1,-2],[1,-2]] for i in arr: if i[0]+c<=0 or i[0]+c>8: continue if i[1]+r<=0 or i[1]+r>8: continue count+=1 print(count)
시간: 19분/20분
'Programming 기초 > Coding Test' 카테고리의 다른 글
[이코테 # DFS/BFS 1] DFS, BFS 예제 (0) 2023.06.07 [이코테 # 구현3] 시뮬레이션 문제 : 게임 개발 (0) 2023.06.07 [이코테 # 구현1] 시뮬레이션 문제: 상하좌우, 완전 탐색 문제 : 시각 (1) 2023.06.06 [이코테 # Greedy3] 숫자 카드 게임 (0) 2023.06.05 [CodeUp#review] 기초 100제 (0) 2023.06.04