[19532] 수학은 비대면강의입니다

RudinP·2023년 3월 27일
0

BaekJoon

목록 보기
3/77

수현이는 4차 산업혁명 시대에 살고 있는 중학생이다. 코로나 19로 인해, 수현이는 버추얼 학교로 버추얼 출석해 버추얼 강의를 듣고 있다. 수현이의 버추얼 선생님은 문자가 2개인 연립방정식을 해결하는 방법에 대해 강의하고, 다음과 같은 문제를 숙제로 냈다.
다음 연립방정식에서
xxyy의 값을 계산하시오.
ax + by = c
dx + ey = f
4차 산업혁명 시대에 숙제나 하고 앉아있는 것보다 버추얼 친구들을 만나러 가는 게 더 가치있는 일이라고 생각했던 수현이는 이런 연립방정식을 풀 시간이 없었다. 다행히도, 버추얼 강의의 숙제 제출은 인터넷 창의 빈 칸에 수들을 입력하는 식이다. 각 칸에는
999-999 이상
999999 이하의 정수만 입력할 수 있다. 수현이가 버추얼 친구들을 만나러 버추얼 세계로 떠날 수 있게 도와주자.

입력

aa, bb, cc, dd, ee, ff가 공백으로 구분되어 차례대로 주어진다.
(999a,b,c,d,e,f999-999 \leq a,b,c,d,e,f \leq 999)
문제에서 언급한 방정식을 만족하는
(x,y)\left(x,y\right)가 유일하게 존재하고, 이 때
xxyy가 각각
999-999 이상 999999 이하의 정수인 경우만 입력으로 주어짐이 보장된다.

출력

문제의 답인
xxyy를 공백으로 구분해 출력한다.

생각

-999 부터 x와 y를 각각 증가시켜가며 해를 구한다.

처음 코드

namespace BaekJoon
{
    public class P19532
    {
        int a, b, c, d, e, f;
        P19532(int a, int b, int c, int d, int e, int f) 
        {
            this.a = a;
            this.b = b;
            this.c = c;
            this.d = d;
            this.e = e;
            this.f = f;
        }

        void sim()
        {
            for(int x = -999; x<= 999; x++)
            {
                for(int y = -999; y<=999; y++)
                {
                    if (a * x + b * y == c && d * x + e * y == f)
                    {
                        Console.WriteLine(x + " " + y);
                        return;
                    }
                }
            }

        }

        static void Main()
        {
            string abcdef = Console.ReadLine();
            string[] ss = abcdef.Split();

            List<int> ints = new List<int>();
            foreach (string s in ss)
            {
                ints.Add(int.Parse(s));
            }

            P19532 p = new P19532(ints[0], ints[1], ints[2], ints[3], ints[4], ints[5]);
            p.sim();


        }
    }
}

그런데 말입니다...

1초안에19991999의연산을할수있을까?1초안에 1999*1999의 연산을 할 수 있을까?
궁금했기 때문에 또 찾아보았습니다.
역시나 가감법 이라는 방법이 있더군요?

참조 후 고친 코드

using System.Security.Cryptography.X509Certificates;

namespace BaekJoon
{
    public class P19532
    {
        int a, b, c, d, e, f;
        P19532(int a, int b, int c, int d, int e, int f) 
        {
            this.a = a;
            this.b = b;
            this.c = c;
            this.d = d;
            this.e = e;
            this.f = f;
        }

        void sim()
        {
            int x = (c * e - b * f) / (a * e - b * d);
            int y = (c * d - a * f) / (b * d - a * e);
            Console.WriteLine(x + " " + y);

        }

        static void Main()
        {
            string abcdef = Console.ReadLine();
            string[] ss = abcdef.Split();

            List<int> ints = new List<int>();
            foreach (string s in ss)
            {
                ints.Add(int.Parse(s));
            }

            P19532 p = new P19532(ints[0], ints[1], ints[2], ints[3], ints[4], ints[5]);
            p.sim();


        }
    }
}


결과


1. 가감법
2. 브루트포스

둘 다 맞긴 하다. 분류 자체는 브루트포스이므로, 둘 다 정답 확인해봤다.

profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글