프로그래머스 - 조이스틱

Computer Science/Problem Solving

문제 설명

제한사항 및 입출력

풀이

문제가 참 간단명료하다. A로 초기화된 문자열을 상하좌우로 움직여 목표 문자열로 바꾸는 문제이다. 상하는 고정되어있기 때문에 아스키코드를 이용해서 최솟값을 구해주었다. 주의할 점은 좌우로 움직일 때 목표 문자열의 연속된 A 구간을 만난다면 직진하는 것보다 돌아가는 것이 더 빠를 수도 있다는 것이다. 뭔가 수학적으로 접근할 수도 있을 것 같아서 고민을 해보았는데,,, 잘 되진 않았다.

그냥 첫 번째 칸부터 전부 확인하면서 어느 구간에서 꺾는 것이 더 빠른지 모두 계산해주면서 풀이해주었다.

내 코드

def solution(name):
    n = len(name)
    updown = sum(min(ord(c) - 65, 26 - (ord(c) - 65)) for c in name)

    move = n - 1
    for i in range(n):
        j = i + 1
        
        while j < n and name[j] == 'A':
            j += 1
        # 오른쪽으로 i까지 갔다가 왼쪽으로 돌아서 j 이후로 가는 케이스들 비교
        move = min(move, 2 * i + (n - j), i + 2 * (n - j))

    return updown + move

 

매번 move를 갱신할 때 i + 2 * (n - j)도 확인해주었는데, 처음엔 왼쪽으로 가는 경우만 생각해주다가 틀렸다. 생각해보니 연속된 A 구간이 앞쪽에 가깝다면 뒷쪽을 먼저 처리하고 와야하기 때문에 이 경우도 생각해주어야한다... 이 부분이 이 문제의 핵심이었던 것 같다.

 

시간 복잡도는 O(n)이다. 내부 while문에서도 최악의 경우 어차피 순회는 한 번만 일어나기 때문에 n을 벗어나지 않는다.

'Computer Science > Problem Solving' 카테고리의 다른 글

프로그래머스 - [1차] 캐시 (2018 KAKAO BLIND)  (0) 2025.11.19
프로그래머스 - 거리두기 확인하기  (0) 2025.11.18
프로그래머스 - 메뉴 리뉴얼  (0) 2025.11.16
프로그래머스 - 서버 증설 횟수  (0) 2025.11.15
프로그래머스 - 등굣길  (0) 2025.11.05
'Computer Science/Problem Solving' 카테고리의 다른 글
  • 프로그래머스 - [1차] 캐시 (2018 KAKAO BLIND)
  • 프로그래머스 - 거리두기 확인하기
  • 프로그래머스 - 메뉴 리뉴얼
  • 프로그래머스 - 서버 증설 횟수
hojoo
hojoo
그냥 개발이 즐거운 사람
  • hojoo
    dev_record
    hojoo
  • 전체
    오늘
    어제
    • 분류 전체보기 (84)
      • Study (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (0)
        • Real MySQL 8.0 (0)
        • 친절한 SQL 튜닝 (0)
        • 도메인 주도 개발 시작하기 (0)
        • 대규모 시스템 설계 기초 (0)
      • Computer Science (68)
        • Problem Solving (30)
        • Data Structure (4)
        • Spring Boot (14)
        • DB (1)
        • Java (4)
        • OS (3)
        • Server (3)
        • Tech (0)
      • Security (16)
        • Reversing (15)
        • Assembly (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Spring boot
    Lena tutorial
    bean
    x64dbg
    소수상근수
    PE header
    DP
    서버 증설 횟수
    servlet
    16946
    13265
    프로그래머스
    19622
    리버싱
    리버싱 핵심원리
    15973
    n+1
    자료구조
    2539
    Header
    DB
    9421
    레나 튜토리얼
    12033
    HTTP
    백준
    dreamhack.io
    21278
    Reversing
    n^2 배열 자르기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
hojoo
프로그래머스 - 조이스틱
상단으로

티스토리툴바