Problem:
Score : 200 points

Problem Statement

There is a kangaroo at coordinate 0 on an infinite number line that runs from left to right, at time 0.
During the period between time i-1 and time i, the kangaroo can either stay at his position, or perform a jump of length exactly i to the left or to the right.
That is, if his coordinate at time i-1 is x, he can be at coordinate x-i, x or x+i at time i.
The kangaroo's nest is at coordinate X, and he wants to travel to coordinate X as fast as possible.
Find the earliest possible time to reach coordinate X.

Constraints

X is an integer.

1≤X≤10^9

Input

The input is given from Standard Input in the following format:

X

Output

Print the earliest possible time for the kangaroo to reach coordinate X.

Sample Input 1

6

Sample Output 1

3

The kangaroo can reach his nest at time 3 by jumping to the right three times, which is the earliest possible time.

Sample Input 2

2

Sample Output 2

2

He can reach his nest at time 2 by staying at his position during the first second, and jumping to the right at the next second.

Sample Input 3

11

Sample Output 3

5

Solution in C# (Mono 4.6.2.0) (judge verdict: Runtime Error)

using System;
using System.Linq;


namespace ConsoleApplication1.AtCoder_Regular_Contest_070
{
    class GoHomeC
    {
        static void Main(string[] args)
        {

            /*
             * Input
             * The input is given from Standard Input in the following format:
             * X
             */
            string[] input = Console.ReadLine().Split(' ');
            int X = int.Parse(input[0]);

           // int n = 2; //number of maximal jumps / time points

            // int maxDistanceInNthStep = (n*(n + 1)) / 2;

            int[] maxDistanceInNthStep = new int[X+1];

            for (int i = 0; i < X+1; i++)
            {
                maxDistanceInNthStep[i] = calcNthStepDistance(i);
            }

            // in case the target is direcly on a max jump point

            if (maxDistanceInNthStep.Contains(X))
            {
                Console.WriteLine(Array.IndexOf(maxDistanceInNthStep, X));
            }

            // more difficult cases
            else
            {
                // then we need to skip on jump
                //if (maxDistanceInNthStep[X] > X) {
                int IdX_FirstElemBiggerThan = 0;
                    
                IdX_FirstElemBiggerThan = 0;

                bool notFound = true;
                int i = 0;

                while (notFound)
                {
                    if (maxDistanceInNthStep[i] > X) {
                        notFound = false;
                        IdX_FirstElemBiggerThan = i;
                    }
                    i++;
                }

                Console.WriteLine(IdX_FirstElemBiggerThan);
            }
        }

        public static int calcNthStepDistance(int n)
        {
            return (n * (n + 1)) / 2;
        }
    }
}