본문 바로가기
프로그래머스/2단계

(Python/LV2) 조이스틱

by windy7271 2022. 10. 10.
728x90
반응형

 출처: https://school.programmers.co.kr/learn/courses/30/lessons/42860

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이:

첫 시도,,

def solution(name):
    str = ["A" for i in range(len(name))]
    target = [i for i in name]
    count = 0
    for basic, target in zip(str, target):
        if ord(target) - ord(basic) > 13:
            count += 91 - ord(target)
        elif ord(target) - ord(basic) < 13:
            count += ord(target) - ord(basic)
        else:count += ord(target) - ord(basic)
    return count + len(name) - name.count("A") - 1
    
22.2 / 100.0

 

다음 문자가 A 일때가 문제인거 같다

커서를 왼쪽으로이동 오른쪽으로 이동이 문제다

 

def solution(name):
    mini = len(name) -1
    res = 0
    for i, char in enumerate(name):
        res += min(ord(char) - ord('A'), ord('Z') - ord(char) + 1)

        next = i + 1
        while next < len(name) and name[next] == 'A':
            next += 1

        mini = min([mini, 2 *i + len(name) - next, i + 2 * (len(name) -next)])
    res += mini

    return res

 

min 안에 3가지 경우 

1. 일반적인 경우 >> 그냥 오른쪽으로 쭉 감

 

2.

1 교집합 4

 

3.

1 교집합 2

각 길이중 최솟값은 res 에 더해줌

 

반응형

댓글