강의로 돌아가기
kimqudxkr

자바 테케 13, 14

뭐가 잘못된거죠?
양수 음수 0 다 되는데

작성중인 코드―Solution.java
1
2
3
4
5
6
7
8
9
class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];

        for(int i=0; i<n; i++)
            answer[i]=x*(i+1);
        return answer;
    }
}
  • 김성엽

    int x -> long x로 바꿔보세요.. 저도 그렇게 바꿨더니 됐네요 어이가 없군요 허허;;

    김성엽―2020.10.19 05:18
  • kimqudxkr

    ㄴ 와 답변 감사드립니다!

    kimqudxkr―2020.10.28 08:39
1 개의 답변
김대현

"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로 변환하는것이 좋을것같습니다.

  • kimqudxkr

    아하... 요구사항을 분석하여 나올 결과를 예측하여 자료형을 결정하는 것이 포인트이군요 답변 감사합니다!

    kimqudxkr―2020.11.16 13:53
  • 오지영

    감사합니다!

    오지영―2020.12.23 21:54
  • aiosdotrata

    감사합니다!!

    aiosdotrata―2021.02.10 10:48
  • Kim heonil

    감사합니다.

    Kim heonil―2021.10.25 21:50
  • haero77

    감사합니다!

    haero77―2022.08.14 13:33
  • inbrain144@gmail.com

    감사합니다!

    inbrain144@gmail.com―2024.03.13 22:30
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.