자두의 데브로그

[자바] 프로그래머스 제일 작은 수 제거하기 본문

코딩테스트/Java

[자바] 프로그래머스 제일 작은 수 제거하기

왕자두 2024. 10. 1. 02:43

https://school.programmers.co.kr/learn/courses/30/lessons/12935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제가 어렵진 않았지만 Array > (Array)List 변환과 Array(List) > Array 변환을 어떻게 하는지 헷갈려서 이 부분에 대해서 정리하고 넘어가려고 한다.

 

Array > (Array)List 변환

  1. for문: 굉장히 간단하니까 넘어가겠다.
  2. asList 함수를 사용한다.
ArrayList<Integer> arrList = new ArrayList<>(Arrays.asList(arr));

 

(Array)List > Array 변환

  1. for문: 굉장히 간단하니까 넘어가겠다.
  2. toArray 함수를 사용한다.
int[] arr = arrayList.toArray(new int[arrayList.size()]);

 

(2024.10.11 수정) 위와 같이 바로 변환은 불가능하다. 이유는 ArrayList는 Integer 타입이기 때문인데, stream과 toArray()를 이용하면 이를 변환할 수 있지만 해당 내용은 추후에 정리해보겠다.

 

프로그래머스에서 주의해야할 점은 입력 받는 매개 변수가 int[] arr와 같이 Array로 초기에 설정되어있는 경우, 임의로 매겨변수 부분을 Integer[]나 ArrayList<Integer> 등으로 수정하는 것이 불가능하다.

 

import java.util.*;

class Solution {
    public ArrayList<Integer> solution(int[] arr) {
        ArrayList<Integer> answer = new ArrayList<>();
        for(int i : arr) answer.add(i);
        
        int min = Collections.min(answer);
        for(int i = 0; i < answer.size(); i++){
            if(min == answer.get(i)) answer.remove(i);
        }
        if(answer.size() == 0) answer.add(-1);
        return answer;
    }
}

 

answer를 ArrayList로 선언한 덕분에 Collections 라이브러리를 활용해 min함수로 최솟값을 구하고, remove(i)를 통해 i 인덱스에 해당하는 값을 바로 삭제하도록 했다.