ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 프로그래머스 x만큼 간격이 있는 숫자
    Algorithm 2022. 1. 31. 22:03
    • x만큼 간격이 있는 n개의 숫자
    문제 설명

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

    제한 조건

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

    입출력 예

    xnanswer
    2 5 [2,4,6,8,10]
    4 3 [4,8,12]
    -4 2 [-4, -8]
    public class 간격이있는숫자 {
        public static void main(String[] args) {
            int x = 4;
            int n = 3;
    
            System.out.println(Arrays.toString(solution(x, n)));
        }
    
        public static long[] solution(int x, int n){
            List<Long> list = new ArrayList<>();
    
            long count = 1;
            for(long i = 0; i < n; i++){
                list.add(x * count);
                count++;
            }
            long[] resultArray = new long[list.size()];
    
            int size = 0;
            for(long temp : list){
                resultArray[size++] = temp;
            }
    
            System.out.println(Arrays.toString(resultArray));
    
            return resultArray;
        }
    }

    안녕하세요~~ 이번 포스팅은 x개만큼 간격이 있는 n개의 숫자를 보겠습니다.

    우선 금일은(1.31) 설 연휴기간이라서 간단하게만 쓰려고 합니다.

     

    문제 자체는 단순합니다. 2개의 int형 변수를 매개변수로 받아서 x의 숫자를 n번만큼 반복시키는 겁니다.

    테스트 데이터의 규칙을 보면 숫자 x부터 시작해서 x2 x3 x4 x5  . . . 이렇게 증가하는 것을 알 수가 있습니다.

    그래서 count라는 long 변수를 만들어서 for문 안에다가 매번 반복시에 1씩 증가하도록 count ++을 해줬습니다.

     

    만약 4, 3이라는 두개의 매개변수가 들어온다면 4 x 1, 4 x 2, 4 x 3 이렇게 반복면서 ArrayList에 add를 해줍니다.

    그리고 동적인 처리를 위해서 ArrayList에다가 담아줬습니다.

     

    이렇게 ArrayList에 담겨져있는 배열들을 다시 long 배열에 담아 주기 위해 다시 한번 향상된 for문을 통해서

    데이터를 하나씩 꺼내온 다음 해당 배열에 담아주고 데이터를 반환합니다.

     

    그리고 ArrayList를 자바 배열로 바꿔주는 toArray라는 메서드도 있었는데 유용한 메서드인 거 같습니다.

     

    그리고 다른 풀이를 보니까 반복문을 한번만 사용하고 나서도 문제를 해결한 코드를 봤었는데요.

     

    아무래도 제가 아직 배열에 대한 이해가 부족하고 알고리즘 문제를 많이 안 풀어 봐서 그런지 더 연습이 필요할 것 같습니다.

     

    반복문을 2번 돌리는 것보다는 1번 돌리는 것이 코드가 훨씬 효율적이고 원하는 데이터를 빨리 얻을 수 있기 때문이죠.

     

    그리고 제한 사항에서 10000000 * 1000을 하면 int타입에 데이터를 담을 수 없습니다.

     

    그래서 count를 long으로 선언하고 데이터를 관리해줬습니다.

     

    파이썬 같은 같은 경우에는 이렇게 타입을 따로 관리할 필요 없이 손쉽게 데이터를 컨트롤하기 좋은데 자바는 기본 타입이 세부적으로 나뉘어있어서 자동 변환, 강제 변환 등에 대해서 더욱 디테일하게 공부하고 기초를 다시 한번 다져야겠다고 생각이 들었습니다.

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

     

    해당 코드는 이 코드입니다

     

    즐거운 설 보내십시오 ^^

Designed by Tistory.