
책 "
이것이 코딩테스트다 with 파이썬" 연습
💡 문제
행복 왕실의 왕실 정원은 체스판과 같은 8 x 8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서 있다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다. 나이트는 말을 타고있기 때문에 이동을 할때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다. 나이트는 특정한 위치에서 다음과 같은 2가지 경우로 이동할 수 있다. 1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기 2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기 이처럼 8 x 8 좌표 평면 상에서 나이트의 위치가 주어졌을때, 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오. 이 때 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a부터 h로 표현한다.
📌 입력 조건
- 첫째 줄에 8 x 8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 입력 문자는 a1처럼 열과 행으로 이뤄진다.
🔐 출력 조건
- 첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오. ex) a1 출력: 2
작은 사담... 이거 2시간동안 헤맸는데 분명히 흔한 리스트 인덱싱 방식을 쓰는데 자꾸 int는 인덱싱을 못한다고 떴다... 이걸 가지고 2시간 동안 해맸는데.... 알고보니 (-2 -1) 이런식으로 ,가 빠져서 -3으로 인식해서 그랬다는 이야기...진짜...화난다..나란 감자.... 심지어 책도 똑같길래 책에서 오류 난줄 알았음...후... 오류나면 대부분 손 문제라고 하셨던 교수님 몇 수 앞을 보신겁니까...ㅎ
우선 코드 먼저
x, y = str(input())
test = ['a', 'b', 'c', 'd', 'e', 'f', 'h']
x = test.index(x) + 1
a = 0
can = [(-2, 1), (-2, -1), (2, -1), (2, 1),
(1, 2), (1, -2), (-1, 2), (-1, -2) ]
for i in range(len(can)):
nx = x + can[i][0]
ny = int(y) + can[i][1]
if nx <= 8 and ny <= 8 and nx >= 1 and ny >= 1:
a += 1
print(a)
가장 먼저 한 생각은 영어를 숫자로 바꾸면 좋겠다는 생각이었다.
그래서 test 케이스를 만들고, x의 값의 index를 찾아 +1 을 해주고,
그 값을 다시 x에 넣어주는 식으로 짰다.
그 후, for문에 len(can) 만큼 실행 시키고, (모든 가능성 넣기) 각각 x, y에 can 에 넣어둔 값만큼 +를 해줬다.
어쩌피 x의 값은 고정이기 때문에 if문 에서 해당 안되면 바로 +1
을 해주도록 짰다.
휴...오류 때문에 험난했던 여정... 누굴 탓하겠나.... 감자를 탓해야지..
진짜 실전이 걱정...