728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Introduction > Java Datatypes
Java에는 8가지 기본 데이터 유형이 있습니다.
- boolean : true 또는 false
- char : 단일 16비트 유니코드 문자
- byte : 8비트 부호 있는 정수
- short : 16비트 부호 있는 정수
- int : 32비트 부호 있는 정수
- long : 64비트 부호 있는 정수
- float : 단일 정밀도 32비트 IEEE 754 부동 소수점
- double : 복수 정밀도 64비트 IEEE 754 부동 소수점
Reference : https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
이번 챌린지에서는 정수 값(byte, short, int, long)을 유지하는데 사용되는 기본 요소를 사용합니다.
입력 정수가 주어지면 해당 입력을 적절하게 저장할 수 있는 기본 데이터 유형을 결정해야 합니다.
Input Format :
첫번째 줄은 테스트 케이스의 수를 나타내는 정수 T입니다.
각 테스트 케이스 T는 임의로 크거나 작을 수 있는 정수 n이 있는 단일 라인으로 구성됩니다.
Output Format :
각 입력 변수 n과 적절한 기본 데이터 유형에 대해 주어진 기본 요소가 이를 저장할 수 있는지 확인해야 합니다. 저장할 수 있다면 다음을 출력하세요.
n can be fitted in:
* dataType
적절한 데이터 유형이 두 개 이상인 경우 각각을 한 줄에 출력하고 크기별로 정렬합니다. (예: byte < short < int < long)
앞에서 언급한 네가지 기본 형식 중 하나에 숫자를 저장할 수 없으면 다음을 출력하세요.
n can't be fitted anywhere.
Sample Input :
5
-150
150000
1500000000
213333333333333333333333333333333333
-100000000000000
Sample Output :
-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
Explanation :
-150은 short, int, long에 저장할 수 있습니다.
213333333333333333333333333333333333은 매우 크며, 이 문제에서 논의된 기본 데이터 유형의 허용 가능한 값 범위를 벗어납니다.
Code :
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");
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");
if(x>=Math.pow(-2, 63) && x<=(Math.pow(2, 63)-1))System.out.println("* long");
}
catch(Exception e)
{
System.out.println(sc.next()+" can't be fitted anywhere.");
}
}
}
}
자료형에 따른 표현범위
자료형 분류 표현범위 Boolean 논리형 false, true char 문자형 \u0000 ~ \uFFFF byte 정수형 -128 ~ 127 short 정수형 -32768 ~ 32767 int 정수형 -2147483648 ~ 2147483647 (약 21억) long 정수형 -922337036854775808 ~ 9223372036854775807 float 실수형 1.40239846E-45f ~ 3.40282347E+38f double 실수형 4.94065645841246544E-324 ~ 1.79769313486231570E+308
실수형에서의 정밀도
정밀도가 높을수록 오차의 범위가 줄어든다.
float의 정밀도는 7자리, double의 정밀도는 15자리.
사용할 변수의 값의 범위가 7자리가 넘으면 정밀도를 고려하여 double을 사용해야 한다.
코드에서 int형과 long형을 처리할 때 범위에 -1을 하는 이유
데이터 유형의 범위를 나타내는 것이다.
정수 데이터 유형은 부호 비트를 고려해야 하며, 부호 비트는 음수와 양수를 구별하는 데 사용된다.
해당 데이터 유형의 최대 값과 최소 값이 부호 비트를 고려한 범위임을 나태니기 위한 표준적인 방법이다.
개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.
728x90
반응형
'> 개발-IT-인터넷 > > JAVA' 카테고리의 다른 글
[해커랭크(HackerRank) JAVA 풀이] - Java Static Initializer Block (0) | 2021.08.27 |
---|---|
[해커랭크(HackerRank) JAVA 풀이] - Java End-of-file (0) | 2021.08.06 |
[해커랭크(HackerRank) JAVA 풀이] - Java Loops II (0) | 2021.08.03 |
[해커랭크(HackerRank) JAVA 풀이] - Java Loops I (0) | 2021.08.02 |
[해커랭크(HackerRank) JAVA 풀이] - Java Stdin and Stdout II (0) | 2021.08.02 |