내 인생은 개발 중
[프로그래머스] 조이스틱 -Python 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42860
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💻 풀이
def solution(name):
answer = 0
n = len(name)
# 기본 최소 이동거리
min_move = n - 1
# 리스트를 전부 돌면서 최소 이동거리 구해주기
for i, char in enumerate(name):
# 알파벳 이동만큼 정답에 더해주기
# Z는 A에서 Z로 이동 한 번 더 해야하니깐 + 1 해주기
answer += min(ord(char) - ord('A'), ord('Z') - ord(char) + 1)
# 연속된 A의 갯수 구하기
next = i + 1
while next < n and name[next] == 'A':
next += 1
# 최소 이동거리, A기준 왼쪽으로 이동했을때 거리, A기준 오른쪽으로 이동했을때 거리 중 최솟값 구하기
min_move = min([min_move, i * 2 + n - next, 2 * (n - next) + i])
#정답에 최소 이동거리 더해주기
answer += min_move
return answer
접근 방법을 모르겠어서 다른 풀이를 보고 푼 문제이다! 처음엔 알파벳을 전부 리스트에 넣고 인덱스를 이용해서 계산하려고 했었는데 ord를 이용해서 유니코드 정수를 이용하여 풀 수 있었다!
그리디 문제라고 되어있긴 한데 완전탐색에 가까운 문제같다!
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 모음사전 - Python (0) | 2024.07.03 |
---|---|
[프로그래머스] 전화번호 목록 - Python (0) | 2024.07.01 |
[프로그래머스] 순위 - Python (0) | 2024.06.19 |
[프로그래머스] 가장 먼 노드 - Python (0) | 2024.06.18 |
[프로그래머스] 섬 연결하기 - Python (0) | 2024.06.11 |
Comments