개발하는 체대생

[코딩테스트] x만큼 간격이 있는 n개의 숫자 본문

코딩테스트/JAVA

[코딩테스트] x만큼 간격이 있는 n개의 숫자

개발하는체대생

 

[문제]

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

 

[제한 조건]

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

 

[풀이]

        //1. for문을 n번 돌려준다.
        //2. 이때 한번씩 돌때마다 x만큼 증가하도록 조건을 준다.
        //3. for문이 x만큼씩 증가할 때 마다 answer 배열에 담아준다.

나의 답안 (방법1)

class Solution {
    public long[] solution(int x, int n) {
        //1. for문을 n번 돌려준다.
        //2. 이때 한번씩 돌때마다 x만큼 증가하도록 조건을 준다.
        //3. for문이 x만큼씩 증가할 때 마다 answer 배열에 담아준다. 

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

나의 답안 (방법2)

class Solution {
    public long[] solution(int x, int n) {
        
        //방법2
        // answer[i-1] = (long)(x*i); => 실패
        // answer[i-1] = (long)x*i; => 괄호를 제거해주니 성공
        long[] answer = new long[n];
        for(int i=1; i <= n; i++){
            answer[i-1] = (long)x*i;
        }
        return answer;
    }
}

시행착오 (방법1)

class Solution {
    public long[] solution(int x, int n) {
        //1. for문을 n번 돌려준다.
        //2. 이때 한번씩 돌때마다 x만큼 증가하도록 조건을 준다.
        //3. for문이 x만큼씩 증가할 때 마다 answer 배열에 담아준다. 
        
        
        // 방법1 
        // -> 결과값은 올바르다. 그러나 오답처리
        // -> 실행속도 때문에 문제가 생긴건 아닐까??
        // -> 타입이 문제??
        // int 타입 "-10000000 이상, 10000000 이하인 정수" 는 해당됨
        // 원인 => x*i 연산 전에 x 타입을 int 에서 long으로 바꿔줘야함.
        // 이유 ? 
        
        long[] answer = new long[n];
        for(int i=0; i < n; i++){
            answer[i] = x+(long)x*i;
            //answer[i] = x+(long)(x*i); => 실패 ?
            //answer[i] = (long)(x+(x*i)); => 실패 ?
            //answer[i] = (long)x+(long)x*i; => 성공
            //answer[i] = (long)(x+(x*i)); => 실패 ?
            //answer[i] = x+(long)x*i; => 성공
        }
        return answer;

    }
}

이유 : x*i 의 연산이 일어나기 전에 long 타입으로 바꿔줘야지 타입 오류가 나지 않는다. 왜냐하면 1,000,000,000 이 넘는 자리 수가 담길 수 있기 때문에 int 타입으로 연산을 진행하면 오류가 난다.

 

회고

- 타입 확인의 중요성을 다시 한번 느꼈다.

- 문제를 다 풀었음에도 실패의 근본적인 이유을 찾아가는 과정이 흥미로웠다.

 

- 자바에 대한 이론적인 공부의 필요성을 느꼈다

 

Comments