본문 바로가기

Algorithm/문제

[백준 / C#] 1011. Fly me to the Alpha Centauri (G5)

 

1011번: Fly me to the Alpha Centauri

우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행

www.acmicpc.net

 

이 문제의 핵심은 공간이동 한번당 이동거리가 1씩밖에 증감하지 않는다는 것과 이동 횟수만 구하면 된다는 것이다. 첫번째 핵심에서 총 구간이 주어졌을 때, 가장 멀리 이동한 경우를 제외한 이동거리는 대칭 형태가 된다. 즉, 1 2 3 ··· 3 2 1의 형태를 가진다. 이제 남은 구간이 이전 이동거리 또는 현재 이동거리의 대칭 이동거리보다 짧거나 같을 경우만 고려하면 되는데, 여기서 두번째 조건이 도와준다. 우리는 이동 횟수만 알면 되기 때문에, 남은 구간에 상관없이 현재 횟수에 1만 더해서 출력해주면 된다.

 

 

골드 입문하기 좋은 문제

 

using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;

namespace ConsolApplicaton3
{
    class Program
    {
        static void Main(string[] args)
        {

            StringBuilder sb = new StringBuilder();
            int stack;
            int x, y;
            int t = int.Parse(Console.ReadLine());
            while (t > 0)
            {
                stack = 0;
                t--;
                string[] tmp = Console.ReadLine().Split();
                x = int.Parse(tmp[0]);
                y = int.Parse(tmp[1]);
                int n = y-x;
                for (int i = 1; ; i++)
                {
                    if (i >= n)
                    {
                        stack++; break;
                    }
                    n -= i;
                    stack++;
                    if (i >= n)
                    {
                        stack++; break;
                    }
                    n -= i;
                    stack++;
                }
                sb.Append(stack + "\n");
            }
            Console.WriteLine(sb);
        }
    }
}