조이스틱

JJW·2024년 12월 13일

코딩 테스트

목록 보기
5/23

문제


  • 탐욕법(Greedy) > 조이스틱

문제 풀이

using System;

public class Solution 
{
    public int solution(string name) 
    {
        // 문자열 길이
        int n = name.Length;
        // 커서 이동 횟수 (오른쪽으로 끝까지 이동 (n - 1))
        int move = n - 1;
        // 알파벳 변환 횟수
        int answer = 0;
        
        for(int i = 0; i < n; i++)
        {
            char target = name[i];
            
            // 변환 횟수 구하기
            // A에서 Target까지 위로 이동하는게 빠르냐
            // Z에서 Target까지 아래로 이동하는게 빠르냐
            answer += Math.Min(target - 'A','Z' - target + 1);
            
            // 연속된 'A'가 나오는 경우 체크
            int next = i + 1;
            while(next < n && name[next] == 'A')
                next++;
            
            // 현재까지 계산된 이동 횟수가 더 빠르냐 (move)
            // 새로 계산한 횟수가 더 빠르냐 (i+n-next + Math.Min(i,n-next))
            // i+n-next : 한 방향으로 이동한 후, 다른 방향으로 이동하는 기본 이동 횟수
            // Math.Min(i, n - next): 어느 방향으로 먼저 이동할지 선택하여 추가적인 이동 횟수를 최소화
            move = Math.Min(move,i+n-next + Math.Min(i,n-next));
        }
               
        return answer + move;
    }
}

느낀 점

문제를 해석하는 능력을 길러야할 듯 합니다.

profile
Unity 게임 개발자를 준비하는 취업준비생입니다..

0개의 댓글