문제 설명 및 입출력 예시
함수 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;
}
}
이런식으로 작성했었다.
그래서 왜 이런일이 벌어졌을까 하고 곰곰히 생각을 하며 제한조건을 다시 읊어보니 x는 10000000 이하인 정수이고 n은 1000 이하인 자연수라는 조건이 있었다.
그말인 즉슨 극한으로 갈 시 10000000을 1000번 더할수도 있다는 의미가 되고 int연산자는 최대 범위가 -21억 ~ 21억 이라는게 기억이 났다.
즉, 값을 극한으로 넣을 시 오버플로우가 발생해버린다는 의미가 되고 그래서 실패가 된다고 생각했다.
그래서 포문에서 i를 long타입으로 넣어주고 answer[(int} i]를 해주니 문제가 바로 풀렸다!
💻프로그래머스 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12954
'실력 향상 일지 > 프로그래머스' 카테고리의 다른 글
[Java] 두 정수 사이의 합 (0) | 2022.10.19 |
---|---|
[Java] 콜라츠 추측 (0) | 2022.10.18 |
[Java] 나머지가 1이되는 수 찾기 (0) | 2022.10.17 |
[Java] 문자열을 정수로 바꾸기 (0) | 2022.10.14 |
[Java] 정수 내림차순으로 배치하기 (2) | 2022.10.13 |