[BAEKJOON] 백준 18238: ZOAC 2 (C#)

2024. 10. 16. 16:08IT/BaekJoon

문제 링크

https://www.acmicpc.net/problem/18238

 

 

문제

2019년 12월, 두 번째로 개최된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다.

작년 ZOAC의 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로운 규칙을 고안해냈다!

규칙은 이러하다.

  • 그림과 같은 원판에 문자들이 순서대로 적혀있다. 처음 순간에 화살표는 'A'를 가리키고 있다.
  • 원판은 왼쪽 또는 오른쪽으로 돌릴 수 있다. 원판을 한 칸 돌리는 데에는 1의 시간이 소요된다.
  • 화살표가 가리키고 있는 문자를 출력할 수 있다. 문자를 출력하는 데에 걸리는 시간은 없다.

시간이 너무 오래 걸리면 지루해할 ZOAC의 참가자들을 위해 성우는 해당 문자열을 앞에서부터 차례대로 최대한 빠르게 출력하려고 한다.

바쁜 성우를 위하여 해당 문자열을 출력하는 데 걸리는 시간의 최솟값을 구해보자.

 

 

입력

첫 번째 줄에 알파벳 대문자로 구성된 문자열이 주어진다. 문자열의 길이는 최대 100자이다. 빈 문자열은 주어지지 않는다.

 

 

출력

입력으로 주어진 문자열을 출력하는 데에 걸리는 시간의 최솟값을 출력한다.

 

 

 

통과한 답안

namespace _18238
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string input = Console.ReadLine();
            char startPos = 'A';
            int time = 0;

            for (int i = 0; i < input.Length; i++)
            {
                time += MovePos(ref startPos, input[i]);
            }

            Console.WriteLine(time);
        }

        static int MovePos(ref char Pos, char target)
        {
            int movement = Math.Abs(Pos - target);
            int moveTime = movement < 13 ? movement : 26 - movement;

            Pos = target;
            return moveTime;
        }
    }
}

 

원형의 돌림판에 A부터 Z까지의 알파벳이 적혀있을 때,

주어진 문자열을 돌림판을 이용하여 완성하는데 필요한 시간을 구하는 문제이다.

원판은 왼쪽 혹은 오른쪽으로 돌릴 수 있고, 1칸 돌리는데 시간은 1이 소모된다.

화살표가 가리키고 있는 문자를 출력할 수 있으며, 출력하는데는 시간이 소모되지 않는다.

 

즉, 이 문제는 현재 화살표가 가리키고 있는 문자와 다음 문자 사이의 거리를 계산하는 문제로,

해당하는 문자의 거리가 최대 13이 되는 부분(알파벳은 26개이므로)이 중요한 문제이다.

 

입력받은 각각의 문자에 대해서 초기 위치는 A로 시작하여,

다음 문자와 현재 문자의 차이를 movement로 저장한 뒤에,

이 값이 13보다 작다면 해당 값을, 13보다 같거나 크다면 26에해 해당 값을 뺀 수를 더하고

현재 문자를 다음 문자로 교체해주는 방식으로 코드를 작성하였다.