[C#] 백준 1193번 분수찾기

2021. 12. 21. 22:01C#/[백준] 기본 수학1

문제

정답 코드 :

using System;

namespace _3
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int input = Convert.ToInt32(Console.ReadLine());
            int x, y;
            int xValue = 1;
            int yValue = 1;
            int count = 1;
            bool isOdd = false;
            bool go = false; //대각선으로 내려가겠다
            bool turn = false; //아래 혹은 옆으로 이동하는 작업을 했는가 판단해주는 값
            int check;
            while (count < input)//(0,1), 2/1, isXzero == true
            {
                if(xValue == 1 || yValue ==1)
                {
                    check = xValue + yValue;
                    isOdd = (check % 2 == 0) ? true : false;
                    if(turn)
                        go = false;
                }
                if(isOdd)
                {
                    if (go)
                    {
                        yValue += 1;
                        xValue -= 1;
                        if(turn == false)
                            turn = true;
                    }
                    else
                    {
                        yValue += 1;
                        go = true;
                        turn = false;
                    }
                    count++;
                }
                else
                {
                    if (go)
                    {
                        xValue += 1;
                        yValue -= 1;
                        if (turn == false)
                            turn = true;
                    }
                    else
                    {
                        xValue += 1;
                        go = true;
                        turn = false;
                    }
                    count++;
                }
            }
            Console.WriteLine(xValue + "/" + yValue);

        }
    }
}

분자와 분모의 합을 통해 합이 짝수면 홀수번째, 홀수면 짝수번째로 만들었다.

예를 들어 1/1 은 1+1 = 2 짝수 이므로 홀수번째에 있는 칸이다.

분모 혹은 분자가 1일때 오른쪽 혹은 아래쪽으로 이동(RETURN) 시키고 대각선(GO)으로 이동시킨다 이렇게 격자에 하나씩 채우는 방식으로 찾는다.

 

근데 스터디모임에서 여자친구가 푼 모습을 봤는데 홀수 일때 짝수 일때 각각 규칙을 만들고 해당 규칙이 실행되도록 하는것이 훨씬 효율적인 코드인거같다.