문제 설명

정수 배열 arr가 주어집니다. arr의 각 요소는 0 이상 9 이하의 정수로 이루어져 있습니다.

이때, 정수 배열 arr의 요소 중 홀수를 반복하고 나머지 요소를 오른쪽으로 shift 한 결과를 출력하는 프로그램을 작성하세요.

단, 이 과정에서 기존의 배열의 길이보다 바깥쪽으로 밀려난 숫자들은 제거합니다. 즉, 출력 배열은 입력 배열과 길이가 같습니다.


입력 형식

· arr : 정수로 이루어진 배열


출력 형식

· 입력 배열과 동일한 크기의 정수 배열


제약 사항

· 0 < arr.length <= 1000

· 0 <= arr[i] <= 9


입출력 예시

· 입력

  · arr = {0, 2, 1, 4, 3, 0}

· 출력 : {0, 2, 1, 1, 4, 3}

· 설명 : 홀수인 1을 두 번 반복하였으며, 이로 인해 밖으로 밀려난 0은 배열에서 사라졌다.


작성 코드

import java.util.Arrays;

public class Solution222 {
    public int[] solution(int[] arr) {

        int[] result = new int[arr.length];
        int cnt = 0;

        for (int i = 0; i < result.length; i++) {
            if (arr[i] % 2 == 0) {
                if (result[result.length -1] != 0) {
                    break;
                }
                result[cnt] = arr[i];
                cnt++;
            } else if (arr[i] % 2 == 1) {
                result[cnt] = arr[i];
                cnt++;
                if (result[result.length -1] != 0) {
                    break;
                }
                result[cnt] = arr[i];
                cnt++;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        Solution222 st = new Solution222();
        int[] arr = {0, 2, 1, 4, 3, 0};
        System.out.println(Arrays.toString(st.solution(arr)));
    }
}

 

정답 코드

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution {
    public int[] solution(int[] arr) {
    	// 결과값을 저장할 ArrayList 객체 'result' 생성
        List<Integer> result = new ArrayList<>();

        int i = 0;
        // result 리스트의 길이가 arr 배열의 길이보다 작을 때까지 반복
        while (result.size() < arr.length) {
            result.add(arr[i]); // arr 배열의 i번째 원소를 result 리스트에 추가
            if (arr[i] % 2 == 1 && result.size() < arr.length) {
                result.add(arr[i]);
            }
            i++;
        }
		// result 리스트를 int 배열로 변환하여 반환
        return result.stream() // result 리스트를 스트림으로 변환
        // 스트림은 컬렉션 요소를 하나씩 처리하는데 유용
                .mapToInt(x->x) // 리스트의 각 요소를 int형으로 매핑
                // 이 메소드는 x를 int형으로 변환하여 반환하는 람다식을 전달받는다.
                .toArray(); // 스트림에서 처리된 요소를 int 배열로 변환
    }

    public static void main(String[] args) {
        Solution st = new Solution();
        int[] arr = {0, 2, 1, 4, 3, 0};
        System.out.println(Arrays.toString(st.solution(arr)));
    }
}