BAEKJOON 24264번: 알고리즘 수업 - 알고리즘의 수행 시간 3

Kim Hyen Su·2023년 7월 11일
0

⏲️ 알고리즘

목록 보기
30/95

문제

🗝️ 포인트

  • 쉬운 문제임에도 또한번 변수 기본 자료형 범위 때문에 틀렸다... int와 long의 허용 범위에 대해 경각심을 가질 필요가 있다. 항상 경계해야 겠다.
  • int는 -2,147,483,648~ 2,147,483,647 범위의 수를 표현할 수 있는데,46341 * 46341 을 하면 이 범위를 넘어선다. 따라서 long 타입으로 받아 줘야 한다.

정수형의 선택기준(feat. 자바의 정석)

  • 정수형의 경우 저장하려는 정수값의 범위에 따라 4개의 정수형 중에 하나를 선택하면 되겠지만, byte나 short 보다는 int형을 사용하는 것이 좋다.

  • byte, short의 경우 int형에 비해 약간의 메모리 절약이 가능하지만, 허용 범위가 작아 연산 시에 범위를 넘을 경우 잘못된 결과를 얻기가 쉽다.

  • JVM 피연산자 스택이 피연산자를 4byte 단위로 저장하기 때문에 4byte보다 작은 자료형(byte, short)의 값을 계산할 때는 4byte로 변환되어 연산이 수행된다. 따라서 오히려 int형을 사용하는 것이 효율적이다.

  • int형의 크기는 4byte(32bits)이므로, 표현할 수 있는 정수의 갯수는 2^32 ≒ 4 X 10^9 으로 약 40억이며, 표현 가능한 정수의 범위는 -2^31 ~ 2^31 -1 (±20억) 이다.

  • 2^10 = 1024 ≒ 10^3 이므로, 2^32 = 2^10 X 2^10 X 2^10 X 4 ≒ 4 X 10^9

  • 결론적으로 정수형 변수를 선언할 경우 int타입으로 하고, int의 범위(± 20억)를 넘어서는 수를 다뤄야 할 때는 long을 사용하면 된다.

정수형의 오버플로우

  • 연산과정에서 해당 타입이 표현할 수 있는 값의 범위를 넘어서는 것을 오버 플로우 라고 하며, 오버플로우가 발생했다고 해서 에러가 발생하는 것은 아니지만, 예상했던 결과를 얻지 못한다.

  • 👨 생활 속 예시

    • 주행 표시기 또는 계수기
    • 계수기의 자리수가 4자리수 인경우, '9999' 최대값 다음 숫자는 원래 10000이 되어야 하지만 4자리수만 표현이 가능하여 맨 앞의 1이 버려저 '0000' 이라는 값을 지시한다.
    • 반대로, '0000'에서 1을 빼면, '9999'라는 값이 나오게 된다. 이는 마치 계수기를 거꾸로 돌리는 것과 마찬가지다.
    • 즉, '0000'에서 정방향으로 돌리면 '0001'이 되지만 역방향으로 돌리면 '9999'이 되는 것이다.
  • 최대값 + 1 → 최소값, 최소값 -1 → 최대값

부호있는 정수의 오버플로우

  • 부호있는 정수는 부호비트가 0에서 1이 될 때 오버플로우가 발생한다.

  • shor 타입의 표현 범위

    • 16비트로 표현할 수 있는 정수의 갯수 : 2^16(65536개)
    • 부호있는 정수 : -2^15 ~ 2^15-1(-32768 ~ 32767)
    • 부호없는 정수(char) : 0 ~ 2^16-1(0~65535)
    • 위의 경우, -32768 -1 → 32767 값이 나온다.

제출 코드

import java.io.*;

public class Main{
    
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt()
        System.out.println(n * n);
        System.out.println(2);
        br.close();
    }
}
profile
백엔드 서버 엔지니어

0개의 댓글