Etc/알고리즘

[백준] 19532

jjuni_96 2024. 6. 18. 16:01
728x90

문제

 

입/출력

 

문제 분석

단순하게 생각해서 이차행렬이라서 아래와같이 풀 생각.

1. y를 x 에 대한 식으로 변경 (x = ~~y +??) 

2. x를 두번재 식에 대입

3. y  = ~~y + ?? 식으로 정리

4. x,y 구하기

 

 

테스트코드

import java.util.Scanner;
import java.util.Arrays;

public class Main{
    public static void main(String[] args) {
        int[] xy = new int[2];
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        double[] val = Arrays.stream(s.split(" ")).mapToDouble(Double::parseDouble).toArray();

        // y
        double a = (val[2] - val[0]*val[5]/val[3])/(val[1]-val[0]*val[4]/val[3]);
        xy[1] = (int) ((val[2] - val[0]*val[5]/val[3])/(val[1]-val[0]*val[4]/val[3]));

        // x
        xy[0] = (int) ((val[5] - val[4] * xy[1]) / val[3]);

        System.out.println(xy[0] + " " + xy[1]);

    }
}

 

에러 발생

1. 처음에 단순하게 int 에 값을 넣을 생각만 하고있는데,-1로 들어가야 되는 값이 0으로 표기되서 한동안 헤맸음...

    => int 연산은 버림연산이기때문에 중간에 값을 넣게되면 아랫자리를 버림해버림. 즉, 0.00006 으로 나온건 다음 연산에서 0으로 처리됨

 

2. 현재는 미지수가 x,y 두개밖에 없지만 더 많아지면 어떻게 계산해야되나 싶어서 찾아보다가 "크래머 공식" 을 알게 되었다....

 

    => 해당 산식이 조금 더 깔끔해서 해당 방식으로 풀기로 결정

 

// 크래머 공식....
/*
ax + by = c
dx + ey = f

a= val[0]
b= val[1]
c= val[2]
d= val[3]
e= val[4]
f= val[5]

     ㅣc  bㅣ                      ㅣa  cㅣ
     ㅣf  eㅣ      ec-bf           ㅣd  fㅣ      af-cd
x = ㅡㅡㅡㅡㅡㅡ = ㅡㅡㅡㅡㅡ     y = ㅡㅡㅡㅡㅡㅡ = ㅡㅡㅡㅡ
     ㅣa  bㅣ      ae-bd           ㅣa  bㅣ      ae-db
     ㅣd  eㅣ                      ㅣd  eㅣ
 */

 

 

풀이

import java.util.Scanner;
import java.util.Arrays;

public class Main{
    public static void main(String[] args) {
        int[] xy = new int[2];
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        double[] val = Arrays.stream(s.split(" ")).mapToDouble(Double::parseDouble).toArray();

        // y
        double a = (val[2] - val[0]*val[5]/val[3])/(val[1]-val[0]*val[4]/val[3]);
        xy[1] = (int) ((val[2] - val[0]*val[5]/val[3])/(val[1]-val[0]*val[4]/val[3]));

        // x
        xy[0] = (int) ((val[5] - val[4] * xy[1]) / val[3]);

        System.out.println(xy[0] + " " + xy[1]);

    }
}

 

 

 

728x90
반응형
LIST