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