ㅁ 문제
정수 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() 메소드에서 배열의 크기는 자바가 알아서 리스트의 크기에 맞게 생성해 주기 때문에, 그 자리에 숫자는 아무런 영향을 미치지 않습니다.
'코딩테스트 > 프로그래머스 Lv.0' 카테고리의 다른 글
[문제] n의 배수 고르기 (0) | 2024.10.10 |
---|---|
[문제] 대문자와 소문자 (0) | 2024.10.10 |
[문제] 숨어있는 숫자의 덧셈 (1) (0) | 2024.10.10 |
[문제] 문자 반복 출력하기 (0) | 2024.10.10 |
[문제] 중앙값 구하기 (1) | 2024.10.09 |