잡다한 배똥월드

728x90

 

 

 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

 

 

 

주어진 정수의 앞 두 자리를 유효숫자로 하여 표기하는 프로그램을 작성하세요.
예를 들어 정수 588235는 5.88235*105 인데, 앞의 소수 부분을 소수점 두 번째 자리에서 반올림하여 5.9*105로 나타내는 것입니다.
 

하나의 예외로, 9999 같은 경우 9.999*103에서 9.999의 소수점 두 번째 자리를 반올림하여 1.0*104으로 나타내야 합니다.



 

 

 

 

 

 

작성 코드 : 

import java.util.*;
import java.io.*;

class Solution {
	public static void main(String args[]) throws IOException {  
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());

		for(int test_case = 1; test_case <= T; test_case++){

            String n = br.readLine();
            int num = Integer.parseInt(n.substring(0, 3));
            int l = n.length() - 1;
            
           	double r = Math.round(num / 10.0) / 10.0;
            
	        if (r >= 10) {
                r /= 10;
                l++;
            }
            
            System.out.printf("#%d %.1f*10^%d%n", test_case, r, l);

		}
	}
}

 

 

 

 

 

접근 방식은 다음과 같다.

 

 

 

 

 

처음에는 숫자의 길이를 가져와서 1을 빼면 10의 몇 승인지 파악할 수 있겠다고 생각했다.

그래서 가져올 때 바로 정수형 변환을 하지 않고 String으로 가져온 후에 Integer.parseInt()를 했다.

이 때, 어차피 소수점 두번째 자리에서 반올림을 할거라서 나머지 뒷 자리는 필요가 없을 뿐더러 4번째 테스트 케이스는 어차피 integer 범위에 들지 않기 때문에 substring으로 앞에서부터 숫자 세 개만 자른 후 형 변환을 했다.

 

 

 

그리고 나서 Math.round로 반올림을 해주는데, 

이 때 Math.round는 소수점 첫번째 자리에서 반올림을 해주는 녀석이다.

 

 

 

테스트 케이스 4번으로 예를 들자면 현재 정수형으로 변환된 것이 602이다.

602의 1의 자리의 숫자가 소수점 두번째 자리의 숫자이기 때문에 60.2의 모습을 만들어서 Math.round()를 하면 되기 때문에 10.0으로 나눠주었다.

참고로 10으로 나누면 애시당초에 602 역시 정수형이고 10도 정수형이기 때문에 소수점 이하의 숫자들이 그냥 없어지기 때문에 10.0으로 나눠 실수형으로 리턴될 수 있게 했다.

마찬가지로 Math.round(602 / 10.0)을 하면 60이 리턴이 되는데, 리턴값은 6.0이 되어야 하니까 또 10.0으로 나눠줬다.

 

 

 

 

그리고 나서 테스트 케이스 2번과 같이 999 의 경우에는 리턴값이 10.0이 된다.

그래서 만약 리턴값이 10보다 크거나 같으면 또 10으로 나누고, 10의 몇 승인지 구해놓은 자리 수 역시 1을 더해준다.

 

 

 

 

마지막으로 출력 형식이 정해져 있기 때문에 System.out.println()으로 하나하나 작성하는 것보다는

System.out.printf() 이용하는 것이 편하기 때문에 이를 통해서 출력해주었다.

 

 

 

 

728x90

+ Recent posts