«   2025/09   »
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
Recent Posts
Tags more
Today
Total
관리 메뉴

내 인생은 개발 중

[프로그래머스] 조이스틱 -Python 본문

Algorithm/프로그래머스

[프로그래머스] 조이스틱 -Python

seul.e 2024. 6. 20. 15:52

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를 이용해서 유니코드 정수를 이용하여 풀 수 있었다!
그리디 문제라고 되어있긴 한데 완전탐색에 가까운 문제같다!

Comments