본문 바로가기
코딩테스트/프로그래머스 Lv.0

[문제] 짝수는 싫어요

by moca7 2024. 10. 10.

 

 

ㅁ 문제

 

정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.

 

 

 

ㅁ 제한사항

 

  • 1 ≤ n ≤ 100

 

 

ㅁ 입출력 예

 

 

 

 

 

ㅁ 풀이

 

class Solution {
    public int[] solution(int n) {

        int[] arr;
        
        if(n%2 == 1){
            arr = new int[n/2 + 1];
        }else{
            arr = new int[n/2];
        }

        
        int num = 0;
        
        for(int i=1; i<=n; i+=2){
            arr[num++] = i;
        }
        
        return arr;   
        
    }
}

 

 

- n이하의 홀수만 뽑는 것은 for 반복문으로 i를 1부터 시작하고, 2씩 더해서 뽑았다.

- 뽑은 값들을 담을 배열을 만드는 것이 문제. 정확히는 배열의 크기.

- 정수 n이 짝수일 때와 홀수일 때 if문으로 다른 길이의 배열을 선언했다.

 

- 배열의 크기를 미리 정하지 않는다면, List<Integer>를 써야했을 듯. 

 

 

 

 

 

ㅁ 다른 풀이

 

import java.util.*;

class Solution {
    public int[] solution(int n) {

        List<Integer> list = new ArrayList<>();
        
        for(int i=1; i<=n; i+=2){
            list.add(i);
        }
        
        
        int[] arr = new int[list.size()];
        Integer[] arr2 = list.toArray(new Integer[list.size()]);
        
        
        for(int i=0; i<arr2.length; i++){
            arr[i] = arr2[i];
        }
        
        
        return arr;
        
    }
}

 

 

- List<Integer>를 써서 풀어봤다.

- 리스트는 배열처럼 길이를 먼저 정할 필요가 없다.

 

- 리스트를 toArray 메소드를 써서 배열로 변환하면, 문제가 제네릭 타입의 객체 배열로 반환된다.

int형 배열이 아닌 Integer형 배열이 나온다.

- 이 문제는 답으로 int형 배열을 반환해야 해서 배열을 따로 선언해야 한다.

 

- toArray 메소드를 안 쓰고 list.get(i)로 바로 int형 배열에 담아도 된다. 그냥 toArray를 써봤다.

- toArray()는 크게 두 가지가 있다.

하나는 아무런 인자 없이 현재 있는 ArrayList의 리스트를 객체배열(Object[]) 로 반환해주는 Object[] toArray() 메소드가 있고,

다른 하나는 ArrayList를 이미 생성 된 다른 배열에 복사해주고자 할 때 쓰는 T[] toArray(T[] a) 메소드가 있다.

 

- toArray() 메소드의 매개변수는 배열의 타입을 지정하기 위해 사용됩니다.

- new Integer[0]: 배열의 타입을 명시하는 부분입니다. 여기서는 Integer[] 타입의 배열로 변환하려는 것이고, 크기는 0으로 설정됩니다. 자바는 이 크기를 무시하고, 리스트의 크기에 맞는 새로운 배열을 자동으로 할당합니다.

- new T[0]에서 0은 아무 상관이 없습니다. 자바의 toArray() 메소드에서 배열의 크기는 자바가 알아서 리스트의 크기에 맞게 생성해 주기 때문에, 그 자리에 숫자는 아무런 영향을 미치지 않습니다.