Hackerrank - Java Datatype

Problem

Java has 8 primitive data types; char, boolean, byte, short, int, long, float, and double. For this exercise, we’ll work with the primitives used to hold integer values (byte, short, int, and long):

  • A byte is an 8-bit signed integer.
  • A short is a 16-bit signed integer.
  • An int is a 32-bit signed integer.
  • A long is a 64-bit signed integer.

Given an input integer, you must determine which primitive data types are capable of properly storing that input.

To get you started, a portion of the solution is provided for you in the editor.

Reference: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Example

Sample Input

1
2
3
4
5
6
5
-150
150000
1500000000
213333333333333333333333333333333333
-100000000000000

Sample Output

1
2
3
4
5
6
7
8
9
10
11
12
13
-150 can be fitted in:
* short
* int
* long
150000 can be fitted in:
* int
* long
1500000000 can be fitted in:
* int
* long
213333333333333333333333333333333333 can't be fitted anywhere.
-100000000000000 can be fitted in:
* long

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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>=Short.MIN_VALUE && x<=Short.MAX_VALUE) System.out.println("* short");
if(x>=Integer.MIN_VALUE && x<=Integer.MAX_VALUE) System.out.println("* int");

System.out.println("* long");
} catch(Exception e) {
System.out.println(sc.next()+" can't be fitted anywhere.");
}
}
}
}

입력받은 수의 데이터 크기에 따라 표현할 수 있는 자료형을 출력하는 간단한 퀴즈였다.

처음엔 각 자료형의 크기를 일일히 자료형으로 표현했는데, 나중에 다른 사람은 어떻게 풀었는지를 확인해보니 각 자료형 클래스의 MIN_VALUE, MAX_VALUE 라는 상수형 데이터를 활용한걸 알고 다시 풀어보았다.

백기선님 스터디를 통해 자바의 자료형을 다시 한 번 학습하고 나서 풀게된 문제여서 자료형 크기를 다시 정리할 수 있었던 문제였으며, 각 자료형 클래스마다 상수형으로 최소 수, 최대 수를 갖고있다는것도 알 수 있었다.