실력 향상 일지/프로그래머스

[Java] x만큼 간격이 있는 n개의 숫자

juniordev 2022. 10. 17. 18:50

문제 설명 및 입출력 예시

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

 

제한조건

    - x는 -10000000 이상, 10000000 이하인 정수입니다.

    - n은 1000 이하인 자연수입니다.

 

입출력 예

x n answer
2 5 [2,4,6,8,10]
4 3 [4,8,12]
-4 2 [-4, -8]

 


코드 & 풀이과정

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

일단 n개의 숫자가 배열에 들어가기 때문에 new long[n]으로 초기화를 한번 해주고 x씩 증가하게 x + (x * -i)를 해준다.

왜 long인지는 아래를 참고해주길 바란다.

 

 


 

회고

일반적으로 풀 시 프로그래머스에서 테스트 13, 14가 실패로 뜨는것이였다.

코드는

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

이런식으로 작성했었다.

테스트 13, 14 실패!

그래서 왜 이런일이 벌어졌을까 하고 곰곰히 생각을 하며 제한조건을 다시 읊어보니 x는 10000000 이하인 정수이고 n은 1000 이하인 자연수라는 조건이 있었다.

그말인 즉슨 극한으로 갈 시 10000000을 1000번 더할수도 있다는 의미가 되고 int연산자는 최대 범위가 -21억 ~ 21억 이라는게 기억이 났다.

즉, 값을 극한으로 넣을 시 오버플로우가 발생해버린다는 의미가 되고 그래서 실패가 된다고 생각했다.

그래서 포문에서 i를 long타입으로 넣어주고 answer[(int} i]를 해주니 문제가 바로 풀렸다!

 


💻프로그래머스 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12954