22.4.17 [HackerRank]Java Datatypes

서태욱·2022년 4월 17일
0

Algorithm

목록 보기
6/45
post-thumbnail

🌱 배경지식

자바 언어의 기본 타입 8가지

각 자료형의 크기를 통해 숫자의 자리수를 판단할 수 있다.
예컨대 long은 8byte 자료형인데, 1바이트 당 8비트가 들어가므로
총 64비트로 이루어진 숫자라는 의미가 된다.

컴퓨터는 모든 숫자를 이진수로 저장하기 때문에, 부호를 판별하기 위해 MSB라는
부분의 비트 하나를 부호판별을 위해 사용한다.(signed)
따라서 -2^63~2^63-1까지 범위를 표현할 수 있다.

✏️ 해설 및 분석

입력받은 수의 데이터 크기를 판단하고 어떤 datatype에 해당하는지

n can be fitted in:
* dataType

의 형태로 나타내주면 되는 문제다. 만약 해당하는 datatype이 두 개 이상이면
각각 한 줄에 출력하고 크기 별로 정렬해 주어야 한다.

만약 이 네가지 기본 형식 어디에도 해당하지 않으면

n can't be fitted anywhere.

을 출력해주면 된다.

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


class Solution{
    public static void main(String []argh) {

        Scanner sc = new Scanner(System.in);
        int t=sc.nextInt();

        for(int i=0;i<t;i++) {

            try {
                long x=sc.nextLong();
                System.out.println(x+" can be fitted in:");
                if(x>=-128 && x<=127)System.out.println("* byte");
                //Complete the code
                if(x>=-32768 && x<=32767)System.out.println("* short");
                // 예시가 있어서 힌트를 얻기 쉬웠던 것 같다. 실수형 범위를 지정해 주고 출력할 문자를 적어준다.
                if(x>=Math.pow(-2, 31) && x<=Math.pow(2,31)-1)System.out.println("* int");
                // int와 long 부터는 자리값이 너무 커져서 숫자를 전부 다 적어주는 것은 비효율적인 것 같다. 
                if(x>=Math.pow(-2, 63) && x<=Math.pow(2,63)-1)System.out.println("* long");
            }
            // 4바이트인 int는 총 32비트이므로 -2^31~2^31-1
        	// 8바이트인 long은 총 64비트이므로 -2^63~2^63-1로 범위를 나타낼 수 있다.
            //Loop II에서 배운 Math.pow를 통해 범위를 나타내 주었다.
            catch(Exception e) {
                System.out.println(sc.next()+" can't be fitted anywhere.");
            }
        }
    }
}

👉 참고

profile
re:START

0개의 댓글