Algorithm/1일 1코테

[??? 프로그래머스] 조이스틱 - 탐욕법

대인보우 2021. 7. 25. 17:17
반응형

https://programmers.co.kr/learn/courses/30/lessons/42860?language=python3 

 

코딩테스트 연습 - 조이스틱

조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다

programmers.co.kr

 

뭔소리인지 이해가 안됨!

def solution(name):
    alpha = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','G','Z']
    start_name = ['A' for _ in range(len(name))]
    name = list(name)
    
    answer = 0
    curr_joystick = 0 

    for s_word, word in zip(start_name, name):
        print(curr_joystick)
        if s_word == word:
            answer += 1
            continue
        # 오른쪽
        r_idx = curr_joystick
        r_distance = 0
        for _ in range(len(alpha)):
            if word == alpha[r_idx]:
                break
            else:
                if r_idx == len(alpha)-1:
                    r_idx = 0
                r_idx += 1
                r_distance += 1
        # 왼쪽
        l_idx = curr_joystick
        l_distance = 0
        for _ in range(len(alpha)):
            if word == alpha[l_idx]:
                break
            else:
                if l_idx == 0:
                    l_idx = len(alpha)
                l_idx -= 1
                l_distance += 1
        
        
        if l_distance > r_distance:
            answer += r_distance
            curr_joystick = r_distance
        else:
            answer += l_distance
            curr_joystick = l_distance
    print(answer)
def solution(name):
    alpha = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

    start_name = [min(alpha.index(v)-0, len(alpha)-alpha.index(v)) for v in name] 

    answer = 0
    pre = ''
    print(start_name)
    for v in start_name:
        l_distance = v
        r_distance = len(alpha)-v
        print(pre, l_distance, r_distance)
        if l_distance == 0 :
            answer += 1
            pre = 'l'
            continue
        
        if r_distance == 0:
            answer += 1
            pre = 'r'
            continue 
            
        if l_distance > r_distance:
            answer += r_distance
            if pre == 'l':
                answer += 1
                pre = 'r'
            pre = 'r'
        else:
            answer += l_distance
            if pre == 'r':
                answer += 1
                pre = 'l'
            pre = 'l'

    print('a ',answer)

 

def solution(name):
    change = [min(ord(i) - ord("A"), ord("Z") - ord(i)+1) for i in name]
    idx, answer = 0, 0

    while True:
        answer += change[idx]
        change[idx] = 0

        if sum(change) == 0:
            break

        left, right = 1, 1
        while change[idx - left] == 0:
            left += 1

        while change[idx + right] == 0:
            right += 1

        answer += left if left < right else right
        idx += -left if left < right else right
        
    return answer
반응형