최대 1 분 소요

문제

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

image

이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.


입력과 출력

입력 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

출력 첫째 줄에 분수를 출력한다.


풀이 과정

규칙은 아래 그림처럼 대각선을 따라 지그재그로 움직인다.

image


이 값들을 다음과 같이 정리해서 보면 규칙을 쉽게 발견할 수 있다.

image

전체 코드

class Program
{
    static void Main(string[] args)
    {
        long N = long.Parse(Console.ReadLine());

        int count = 0;  // 몇 번째 대각선인지
        long level = 0; // 해당 대각선의 마지막 자리 번호

        while(true)
        {
            count++;
            level += count;
            if (N <= level)
            {
                break;
            }
        }

        long num = level - N; // 해당 대각선 순서의 몇 번째 인지

        if(count % 2 == 0) // 짝수라면
        {
            Console.WriteLine($"{count - num}/{1 + num}");
        }
        else               // 홀수라면
        {
            Console.WriteLine($"{1 + num}/{count - num}");
        }
    }
}

댓글남기기