일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 순환
- front-end
- SQL
- android
- java
- javascript
- CleanCode
- inflearn
- 해슁
- Spring
- Color
- 자바
- 구현
- algorithm
- 검색트리
- html
- 코딩테스트
- codecademy
- SWEA
- Kotlin
- 다이나믹 프로그래밍
- BFS
- CSS
- 프로그래머스
- 정렬
- 알고리즘
- DFS
- DP
- 클린코드
- Web
- Today
- Total
깡뇽
[코테] 구현 문제풀기 - 왕실의 나이트 본문
Day6
구현 문제풀기 - 왕실의 나이트 (난이도 하)
<문제>
나이트가 8 X 8 좌표 평면에서 L자 형태로만 이동할 수 있을 때, 나이트의 이동 경로 경우의 수를 출력해야 한다. 행 위치는 1~8, 열 위치는 a~h로 표현한다.
1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동
2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동
ex) 나이트의 위치 : a1 → 2가지 경우(1. c2 / 2. b3)
<조건>
첫째 줄 : 나이트의 현재 위치 좌표 문자열 입력.
왕실의 나이트 풀이
from string import ascii_lowercase
alphabets = list(ascii_lowercase) #알파벳 소문자 리스트 생성
n = input()
w = alphabets.index(n[0]) + 1 #알파벳 리스트에서 입력받은 알파벳을 찾은 후 정수로 변환
h = int(n[1])
cnt = 0
#수평2,수직1 또는 수평1,수직2의 경우
direction = [(-2, -1),(-2,1),(2,-1),(2,1),(-1,-2),(-1,2),(1,-2),(1,2)]
for i in range(0, len(direction)):
nw = w + direction[i][0]
nh = h + direction[i][1]
#8X8을 벗어나면 무시하기
if nw < 1 or nw > 8 or nh < 1 or nh > 8 :
continue
#무사히 이동할 수 있다면 카운트
else:
cnt += 1
print(cnt)
이동 가능한 방향들의 조합을 좌표로 표현하고, 8X8을 벗어나지 않을 때에만 카운트를 진행한다. 구현 알고리즘들 중에서 좌표 or 이동 이런 문제들은 가능한 조합들을 고려하여 반복문을 돌려서 확인해주는 것이 포인트인 것 같다.
#1
#2
+ 기억하고 넘어가자
1번. 소문자 알파벳 활용
from string import ascii_lowercase
→ a ~ z 리스트 만들기 : alphabets = list(ascii_lowercase)
→ a ~ z가 key, 0을 value로 가지는 딕셔너리 만들기:
alphabets = {}
for i in ascii_lowercase:
alphabets[i] = 0
2번. 아스키 ↔ 숫자
→ ord( ) : 아스키코드를 넣으면 숫자 반환
ord('a') = 97
ord는 ordinal의 약자
→ chr( ) : 숫자를 넣으면 아스키코드 반환
ord('65') = A
chr는 character의 약자
3번. 아스키 숫자 변환 표현
w = int( ord( n[0] ) ) - int( ord( 'a' ) ) + 1
문제 풀이에서 w에 할당되는 문자를 알파벳 리스트에서 찾아 인덱스 숫자를 활용하는데 대신에 뺄셈을 활용하는 것이다. a 뒤에 있는 문자들의 숫자에서 a의 숫자를 빼주면 차이값이 나오기 때문이다..! 아주 단순히 표현하면 ord('b') - ord('a')를 하면 1이 나오는데 a가 기준이자 1이므로 b는 2가 되며, 알파벳과 a의 숫자값 차이에 1을 더하면 a가 1일 때 각 알파벳의 번호를 구할 수 있다.
'Algorithm > Coding Test' 카테고리의 다른 글
[코테] DFS/BFS 공부하기 (0) | 2022.02.10 |
---|---|
[코테] 구현 문제풀기 - 게임 개발 (0) | 2022.02.04 |
[코테] 구현 공부하기 (9) | 2022.02.02 |
[코테] 그리디 문제풀기 - 1이 될 때까지 (0) | 2022.02.01 |
[코테] 그리디 문제풀기 - 숫자 카드 게임 (0) | 2022.02.01 |