알고리즘 : 프로그래머스 : JAVA : x만큼 간격이 있는 n개의 숫자

2022. 1. 16. 03:58알고리즘/프로그래머스

반응형

<문제>


<코드 & 설명>

class Solution {
    public long[] solution(int x, int n) {
//         배열의 크기를 n으로 만드는 코드.
        long[] answer = new long[n];

        for(int i = 0; i < n; i++){
            answer[i] = (long)x * (i+1);
        }
        return answer;
    }
}

설명1.

 

(1) 배열의 크기가 n인 answer 배열을 만든다.

(2) n만큼 for문을 돌리면서 answer[0]부터 answer[n-1]까지 x * 1, x * 2, ....., x*n 한 값을 넣어준다.

(3) answer값을 return한다.

 

 x가 10000000이고 n이 1000이라면 제일 큰 값으로 x*n = 10,000,000,000이 될 수 있기 때문에 answer 배열은 long형으로 해줘야한다. 현재 x와 i가 int형이므로 오류가 나지 않기 위해서 x를 long형으로 명시적으로 바꿔줌으로써 x * (i+1)이 자동적으로 형변환이 일어날 수 있게 해준다.

 

설명2.

 

n개의 length가 생길 것으므로 n 개만큼 배열의 공간 생성
- for문 돌면서 그냥 넣어주면된다.
- 근데 int 와 long의 표현하는 수치의 범위때문인지 특정 테스트케이스에서는 에러가 나서 x의 타입을 long으로 변경.

 

x와 n을 받아서 x를 1부터 n까지 곱한 값을 배열에 쫙 넣으면 되는 문제이다.
보면 간단해 보이겠지만 아마 문제 풀다가 마지막 2개의 테스트에서 막히는 경우가 좀 있다.
보면 그냥 n의 크기로 배열을 만든 뒤 x를 1부터 곱해가면서 answer 배열에 착착 넣어주면 될 것 같은데
마지막 두 테스트에서 틀리는 이유가 값을 long 처리해서 넣어주지 않아서 그런 경우가 많다.
왜 마지막 두 테스트에서 틀리냐면 int 값의 범위를 넘어서는 경우에 처리를 못해줘서 틀려서 그렇다.
여기서 long으로 처리를 해 주면 범위를 넘어서는 경우가 나오지 않고 해결 가능하다.

 

 

<다른방법>

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


      return answer;
  }
}

 

class Solution {
    public static long[] solution(int x, int n) {
        long[] answer = new long[n];
        answer[0] = x;

        for (int i = 1; i < n; i++) {
            answer[i] = answer[i - 1] + x;
        }

        return answer;

    }
}

 

반응형