깃허브:
https://github.com/MSIQOC/Programmers/blob/main/%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1.py
https://programmers.co.kr/learn/courses/30/lessons/42860
참고 블로그:
처음에 풀이 방법이 이해가 안돼서 참고 블로그를 통해서 알고리즘을 파악하고 다시 풀어보았다.
조이스틱의 기본 알고리즘은 코드를 분석해봤을 때 이렇게된다.
1. name 안의 각 알파벳에 대한 위아래로의 최소 이동값들을 구한다. (여기에서 초기상태는 다 A로 맞춰진 상태고 Z로 맞춰지면 한번은 위로 올려야하기 때문에 ord("Z") - ord(i)가 아니라 여기에 +1까지 해줘야한다.)
2. 오른쪽 왼쪽의 최소 이동값을 구해주고 이동길이가 더 짧은 쪽으로 이동시켜준다.
3. 모든 값들이 다 0으로 맞춰질 때까지 위의 과정을 반복한다.
Python
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
|
def solution(name):
answer = 0
make_name = [min(ord(i)-ord("A"), ord("Z")-ord(i)+1) for i in name] #이름에서 실제로 더 가까운 거리를 계산
#여기에서 Z로 맞춰지면 한번은 밑으로 내려야하기 때문에 +1을 해준다. (초기 세팅이 AAA로 돼있음.)
p = 0
while True:
answer += make_name[p]
make_name[p] = 0
if sum(make_name) == 0: #sum 메소드를 사용해서 배열의 총 합을 구한다.
break
l, r = 0, 0
pp = p
while make_name[pp] == 0:
l += 1
pp -= 1
pp = p
while make_name[pp] == 0:
r += 1
pp += 1
if l < r:
p -= l
answer += l
else:
p += r
answer += r
return answer
|
cs |
'프로그래머스 풀이' 카테고리의 다른 글
프로그래머스 2단계 - 후보키 (Python) (0) | 2021.12.01 |
---|---|
프로그래머스 2단계 - 괄호 회전하기 (Python) (0) | 2021.11.17 |
프로그래머스 2단계 - 행렬 테두리 회전하기(Python) (0) | 2021.09.19 |
프로그래머스 2단계 - 실패율(Java) (0) | 2021.09.05 |
프로그래머스 3단계 - 가장 먼 노드 (Python, Java) (0) | 2021.08.31 |