82. 뭐라 요약해야할지 모르겠으니 원본링크의 문제를 확인바랍니다.

입력: h, b, c ,s 가 공백을 두고 입력됨

입력 범위: 자연수, 최대값 h, b, c ,s : 48000, 32, 5, 6000

출력: 소수점 2째 자리에서 반올림, 단위 MB 출력

입력 예시

44100 16 2 10

출력 예시

1.7 MB

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int h = scan.nextInt();
		int b = scan.nextInt();
		int c = scan.nextInt();
		int s = scan.nextInt();
		scan.close();
		
		long middle = 1;
		//middle = h * b * c * s;
		middle *= h;
		middle *= b;
		middle *= c;
		middle *= s;
		
		double result = middle/8;
		result /= (1024 * 1024);
		System.out.println(String.format("%.1f MB", result));
	}
}

 

Swift 4.2

import Foundation

if let line = readLine(){
    let valueArray = line.split(separator: " ")
    if valueArray.count == 4,
        let h = Int(valueArray.first!),
        let b = Int(valueArray[1]),
        let c = Int(valueArray[2]),
        let s = Int(valueArray[3])
    {
        let middle = h * b * c * s
        let result = Double(middle) / 8 / 1024 / 1024
        print(String.init(format: "%.1f MB", result))
    }
}

 

이번 문제는 엄청긴데 결국 네 수를 곱하고 8로 1024로 또 1024로 나누는 문젭니다.

중간 결과값이 Int 범위를 넘어서기에 이제 공부시작하시는 분들은 int로 그냥 처리하다가 값이 -값이 나오는일이 비일비재할문제일거같습니다.

물논~!

스위프트에서는 Int값 범위가 매우 넓기에 그냥! Int로 처리하시면됩니다.

사실 코드업에서 이러한 문제에 대해 물어보는걸 귀찮아하는건지 입력가능한 최고값을 입력시 잘못나오는거에대한 테스트케이스가 없는거같습니다.

자바코드쪽의 주석친 한부분이 int형으로 된 곱셈을 int형끼리 곱하고 long에 넣기때문에 문제 생겨야하는데 사이트에서는 문제없다고 평을 내리더군요;;

따로 안돌려봤으면 그냥 아마 주석친부분으로 포스트했을거같네요

https://codeup.kr/problem.php?id=1085

 

[기초-종합] 소리 파일 저장용량 계산하기(설명)

소리가 컴퓨터에 저장될 때에는 디지털 데이터화 되어 저장된다. 마이크를 통해 1초에 적게는 수십 번, 많게는 수만 번 소리의 강약을 체크해 그 값을 정수값으로 바꾸고, 그 값을 저장해 소리를

codeup.kr

 

+ Recent posts