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

이정연·2022년 11월 30일
0

CodingTest

목록 보기
101/165
post-thumbnail

img

문제 링크

설계도

  • 조건: 만들고자 하는 문자열 name
  • 문제: A로 이루어진 문자열에서 name까지의 조이스틱 최소 조작 횟수

설명

  • 상하 조작 횟수와 좌우 조작 횟수로 나누어 구현한다.

상하 조작 횟수

  • ASCII CODE를 이용하였다.

img

  • A(65)부터 N(78)까지는 정방향으로 이동하는 것이 적다.
  • O(79)부터 Z(90)까지는 역방향으로 이동하는 것이 적다.

좌우 조작 횟수

    1. 방향을 바꾸지 않는 경우
    1. 방향을 바꾸는 경우
      1. 오른쪽으로 갔다가 왼쪽으로 가는 경우
      1. 왼쪽으로 갔다가 오른쪽으로 가는 경우

1번의 이동 횟수 = [name 길이]-1

2번의 이동 횟수는 그림을 보며 이해해보자.

  • 1번 , 2-1번, 2-2번을 비교하여 제일 최소값을 갱신시켜준다.

코드

def up_down(target):
    if 65<=ord(target)<=78:
        return ord(target)-65
    else:
        return 91-ord(target)

def solution(name):
    answer = 0
    # 상하 조작 횟수
    for i in range(len(name)):
        answer += up_down(name[i])
    # 좌우 조작 횟수
    lr = len(name)-1
    for i in range(len(name)):
        next=i+1
        while next<len(name) and name[next] == 'A':
            next += 1
        # 오른쪽에서 왼쪽 좌우 조작 횟수
        lr = min(lr,2*i+len(name)-next)
        # 왼쪽에서 오른쪽 좌우 조작 횟수
        lr = min(lr,2*(len(name)-next)+i)
    answer += lr
    return answer
profile
0x68656C6C6F21

0개의 댓글