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

Jimeaning·2023년 3월 3일
0

코딩테스트

목록 보기
2/143

Python3

문제

제한 사항

입출력 예시

나의 풀이 (시도)

  • 이름을 한 글자씩 쪼갠다
  • 가운데 문자(m)보다 작으면 왼쪽으로 먼저 세기
  • 가운데 문자(m)보다 크면 오른쪽으로 가서 세기

주요 포인트

A의 최대 길이가 포인트

→ A가 여러 군데 연속되면 더 적은 쪽으로 가야 함

좌우: 연속된 A는 갈 필요가 없다

→ 이동하다가 연속된 A를 만나면 반대방향으로 돌아가서 세기

상하: A부터 오름차순을 해야 빠른지, Z부터 내림차수을 해야 빠른지 판단해야 함

for i, char in enumerate(name):
	answer += min(ord(char) - ord('A'), ord('Z') - ord(char) + 1)

최종 풀이

def solution(name):
    # 조이스틱 횟수
    answer = 0
    # 좌우 이동 최소 횟수
    min_move = len(name) - 1
    
    for i, char in enumerate(name):
    	# (상하 이동) 해당 알파벳 변경 최솟값 추가
        answer += min(ord(char) - ord('A'), ord('Z') - ord(char) + 1)
        
        # 해당 알파벳 다음부터 연속된 A 문자열 찾기
        next = i + 1
        while next < len(name) and name[next] == 'A':
            next += 1
            
        # 오른쪽으로 갔다가 왼쪽으로 올 때는 2 * i, 반대는 2 * (len(name) - next)
        min_move = min([min_move, 2 * i + len(name) - next, i + 2 * (len(name) - next)])
    
    answer += min_move
    return answer
profile
I mean

0개의 댓글