알고리즘 문제풀이/백준

#15726 : 이칙연산

모항 2022. 7. 13. 19:40

풀이방법

사용된 것:

수학

 

2022.07.13

간단한 문제이지만 기억해야 할 것이 한 가지 있어서 적는다.

 

정답을 구하기 위하여 나눗셈과 곱셈을 한 번씩 해야 하는 문제이다.

 

이때 주의할 점은

정답을 출력할 때 소숫점 아래를 모두 버린다고 해도, 출력연산 대상인 세 수를 정수 형태로 읽어오면 안 된다는 것이다.

먼저 double 등의 소수 타입으로 받아온 다음, 연산을 모두 마치고, 정답이 도출된 뒤에 그 정답을 정수로 만들어 출력해야 한다.

그러지 않으면 오차가 발생한다.

 

예를 들어, 1 / 3 * 4 라는 연산을 하는데, 세 수를 모두 정수로 읽어왔다고 치자.

1 / 3 의 값은 0.33333.....이지만, 1과 3 두 수 모두 정수형이라면 프로그램은 소숫점 아래를 버리고 0이라는 정수형의 결과를 취한다.

여기에 4를 곱하면 답은 0이 나온다.

 

그러나 만약 세 수를 유리수 형태로 읽어왔다면,

1 / 3 의 결과는 0.33333.....그대로 저장된다.

여기에 4를 곱하면 1. 몇이라는 결과가 나온다.

여기서 소숫점 아래를 버리면 답은 1이다. 15726번 문제에서는 이렇게 구한 답이 올바른 답이다.

 

 

코드

Java(2022.07.13)

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		
		double a = sc.nextDouble();
		double b = sc.nextDouble();
		double c = sc.nextDouble();
		
		double answer = a * Math.max(b, c) / Math.min(b, c);
		
		System.out.print((int)Math.floor(answer));
		
		sc.close();
	}

}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

#12873 : 기념품  (0) 2022.08.02
#1935 : 후위 표기식2  (0) 2022.07.19
#8979 : 올림픽  (0) 2022.07.11
#11945 : 뜨거운 붕어빵  (0) 2022.06.23
#1590 : 캠프가는 영식  (0) 2022.06.19