DevKim

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

알고리즘 PS

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

on_doing 2021. 2. 11. 20:44
728x90

programmers.co.kr/learn/courses/30/lessons/42860

 

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

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

programmers.co.kr

[ 알고리즘 ]

그리디

 

[문제 접근]

이 문제를 풀때, 고려해야할 변수는 두가지이다

1. 해당 알파벳을 찾을 때 다음 알파벳을 찾는게 더 빠른 방법인지, 뒤로 가면서 찾는 방법이 더 빠른지 (ex. A->Z )

2. 커서를 움직일 떄 왼쪽으로 움직일 것인지, 오른쪽으로 움직일 것인지

 

문제의 핵심은 2번이라고 생각한다. 카운팅한 알파벳은 'A'로 바꿔주고 'A'가 아닌, 즉 카운팅 안된 알파벳까지의 거리를 각각 계산해서 더 작은 거리를 채택한다 

 

 

[코드]

def solution(name):    
    answer = 0
    i=0
    name=list(name)
    
    List=['A']*len(name)
    
    while True:
        right=1
        left=1
        
        if i==len(name):
            break
            
        if name[i]!='A':
            if ord(name[i])<=77:
                answer+=ord(name[i])-ord('A')
                
            else: #아래로 조작하는게 더 빠름
                answer+=ord('Z')-ord(name[i])+1
            name[i]='A'   
        
        if List==name:
            break
            
        else: #A를 만나면         
            for j in range(1,len(name)):
                if name[i+j]=='A':
                    right+=1
                else:
                    break
                    
                if name[i-j]=='A':
                    left+=1
                else:
                    break

            if left < right: #거꾸로 가는게 더 적음
                answer+=left
                i=i-left
                
            else:
                answer+=right
                i=i+right
            
                
    return answer
728x90
Comments