TIL(사전캠프)

알고리즘 코드카타. x만큼 간격이 있는 n개의 숫자(2024-06-11)

note994 2024. 6. 11. 15:36
문제 개요

요약 : x와 n을 입력받아 x부터 시작하여 x씩 증가하는 n개의 리스트를 만들어 반환하라
 
문제의 내용 자체는 간단하다. x부터 시작하여 x씩 증가하는 n개의 수열을 만드는것이다.
일단 당장 생각나는대로 코드를 작성해본다.

 
얼핏보면 x부터 시작하여 x만큼 증가하는 n크기의 리스트를 반환하는 조건을 만족하여 맞는것 같지만 틀렸다.


이유)
 
제한조건을 살펴보자

x가 -10,000,000이상, 10,000,000이하 라고 한다. 그렇다면 만약 x가 10,000,000이고 n이 1000이라면?
 
그렇다 숫자가 엄청나게 커진다. 그리고 잘 보면 answer 배열의 자료형은 long인것을 알 수 있다.
 
그리고 연산을 x를 기준으로 하는데, x의 자료형은 int형이다. int형의 범위는 -2,147,483,648 ~ 2,147,483,647 이다.
 
그럼 x가 10000000, n이 1000이면 리스트의 1000번째 요소는 10,000,000,000이다 
즉, x의 자료형인 int형의 범위를 벗어난다. 이 숫자를 int형태로 저장하려하니 오류가 발생하는 것이다.


해결법)
 
int형을 long형으로 변환시켜 값을 전달하면 된다. long형의 범위는 -9,223,372,036,854,775,808부터 9,223,372,036,854,775,807로 범위 안에 충족한다.
 

5줄, x를 long형태로 형변환 하였다.

이렇게 형변환을 통해 큰 숫자를 담을 수 있게 변환하면 정상적으로 수가 들어간다. 우리가 주로 사용하고 익숙한 int형을 습관적으로 사용하는것을 노린 함정이라고 볼 수 있다. 이 문제는 자료형에 대해 다시한번 생각하게 해주는 문제인것같다.