프로그래머스 [JAVA] :: x만큼 간격이 있는 n개의 숫자

smi·2023년 1월 27일
0

📚 문제 정의

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.


📝 제한사항

  • x는 -10000000 이상, 10000000 이하인 정수입니다.
  • n은 1000 이하인 자연수입니다.

📝 입출력 예

xnanswer
25[2,4,6,8,10]
43[4,8,12]
-42[-4, -8]

💡 코드

class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        
        for(long i = 0; i < n; i++) { 
            answer[Long.valueOf(i).intValue()] = x * (i + 1);    
        }
        
        return answer;
    }
}

이 놈의 long 타입 때문에 애 좀 먹음.. 좀 더 공부해야할 것 같다..

어떤 친절한 분이 왜 "int x" 를 "long x" 로 바꿔야하는 지 설명해주셨다. 이유는 다음과 같다.

문제를 푸실 때 요구사항의 특징을 잘 파악하는 것이 실무에서 가장 중요합니다.
x는 최대 1000만, n은 1000까지 입력이 가능합니다.
연산으로 최대로 나올수 있는 최대값은 100억이 된다는 이야기입니다.
int 자료형의 최대 표현범위는 약 -21억 ~ +21억 입니다.
그래서 int형 x과 int형 n의 연산결과가 표현 범위를 벗어나 에러가 난겁니다.
(int와 int를 연산하면 결과도 int형으로 반환됩니다.)
그에 비해 long형은 표현범위가 일단 조 단위가 넘기 때문에 위의 연산 결과를 받아오기에 충분합니다.
int 와 long 데이터 표현 범위가 다른데 연산을 하면 데이터가 큰 long형으로 연산결과가 나옵니다.
그러니 int x 를 long x 로 표현하면 실행이 되는겁니다.
int x 를 long x 로 바꾸는 것도 방법이지만, 알고리즘 문제를 푸실 때 매개변수 타입을 바꾸는 일보다는
주어진 매개변수 타입 그대로 활용하는 것이 좋을 것 같습니다.
알고리즘을 그대로 사용하신다면 int x 대신, int i 를 long i 로 변환하는것이 좋을 것 같습니다.


profile
공부한 거 올려요 :)

0개의 댓글