본문 바로가기
Java/알고리즘

[프로그래머스/알고리즘] x만큼 간격이 있는 n개의 숫자(자바/Java)

by 전재경 2022. 11. 19.

문제 설명

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

 

제한 조건

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

 

 

Step1. 문제분석

우선 x의 값과 n의 값을 보자

2,4,6,8,10 이런식으로 즉 반복문을 통해 *(i+1) 이런식으로 배열마다 돌아서 넣으면 된다고 생각했다.

 

그리고 처음에 이렇게 값이 주어졌다.

class Solution {
    public long[] solution(int x, int n) {
        long[] answer = {};
        return answer;
    }
}

 

배열에 대한 선언이 필요하다.

그렇기에 n의 값이 숫자의 갯수니까 new long[n] 으로 배열을 선언해준다.

 

그리고 아까 말한대로 for문으로 n번만큼 돌고 그 값을 배열에 넣어준다.

 

 

Step2. 문제풀이 코드

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

 

문제를 풀었는데 answer[i] = x * ( i-1 ) 이렇게만 넣었다.

테스트 코드를 실행했을때는 잘 진행이 되서 성공이라 생각했는데 마지막 부분에서 오류가 났다.

 

 

※문제에서 -10,000,000 <= x <= 10,000,000 이고,

int형 변수의 범위는 -2,147,483,648 ~ 2,147,483,647 이다.

 

따라서 가령,

x = 10,000,000, n = 1,000 이라면

x * (i + 1) = 10,000,000 * 1,000 = 10,000,000,000 와 같이 int형 범위를 초과하게 된다.

 

 

그렇기에 long타입으로 변환을 해주는 작업이 필요했다.

 

Step3. 다른 사람의 풀이 코드

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

 

처음부터 x를 long 타입으로 선언하고 작업을 진행해도 된다.

 

참 간단한 생각의 차이부터 시작인것같다.

댓글