20151126
*이문제는 dovelet 에 있는 알고리즘 문제입니다.
분수 크기 비교/compare
프로그램 명: comparefrac
제한시간: 1 초
a/b 와 c/d 의 대소를 판단하는 프로그램이다.
입력
자연수 a , b, c ,d 가 입력으로 주어진다. 입력되는 수는 10000 이하이다.
출력
- a/b > c/d 이면 1
- a/b = c/d 이면 0
- a/b < c/d 이면 -1
을 출력한다.
입출력 예
입력 3 4 5 6 출력 -1
문제 풀이
1) 풀이
import java.io.PrintStream; import java.util.Scanner; public class Main { Scanner sc = new Scanner(System.in); static PrintStream p = System.out; double a; double b; double c; double d; public static void main(String[] args) { Main m = new Main(); m.input(); m.Output(); } void input(){ a = sc.nextInt(); b = sc.nextInt(); c = sc.nextInt(); d = sc.nextInt(); } void Output(){ a = a/b; c = c/d; if(a > c){ p.print("1"); }else if(a == c){ p.print("0"); }else{ p.print("-1"); } } }
*짧게 코딩하는것도 좋지만 저는 함수와 객체 지향개념을 쓰고 싶어서 이렇게 코딩 했습니다.
분수의 크기를 비교하는 문제 입니다. 정수형인 int 값으로 분수 형태를 저장하게 되면 몫
나눈 몫 값만 남게 되기 때문에 분수의 크기를 비교 할 수 없습니다. 그래서 저는 실수 값도 받는
Double 형으로 받아서 문제를 해결했습니다.
좀 더 수학적인 방법으로는 아래와 같은 흰트 개념을 참고해서 분수의 크기를 정수로 처리가 가능합니다.
컴퓨터에서 가능하면 실수처리를 피하는게 좋다고 하니 흰트 개념을 잘 이용해 보세요.
아래 흰트 개념이 있습니다.
흰트 개념
분수크기 비교 hint
입력되는 수가 정수이므로 정수로 입력을 받습니다.두 분수를 통분하면
1scanf
(
"%d %d %d %d"
,&a,&b,&c,&d);
// a/b , c/d
![]()
b*d 의 부호는 양수이므로 분자의 a*d - b*c 가 양수인지 0 인지 음수인지만 판단하면 됩니다.
컴퓨터에서 정수처리가 가능하다면 실수처리를 피하는 게 좋습니다. 실수연산의 결과는 완전히 신뢰할수가 없습니다.
'알고리즘(dovelet 문제풀이) > 2층' 카테고리의 다른 글
지하 차도/truck (if , else if , else 조건문 문제): (0) | 2016.12.14 |
---|---|
해킹 회사/hack( If 조건문 문제) (0) | 2016.12.13 |
수영장 가는 날/swimming( or 조건 if 문 문제) (0) | 2016.12.09 |
음표/codi note (정렬 구별 문제) (0) | 2016.12.09 |
대소 판별하기/compare(대소 판별하기 알고리즘) (0) | 2015.11.26 |