본문 바로가기
코딩테스트 연습

제일 작은 수 제거하기

by 신재은👩🏼‍💻 2024. 5. 4.

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

 

프로그래머스

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

programmers.co.kr

이 문제는 내가 잘못 풀었다고 생각해서 기록한다.

내가 풀고 싶은 형태가 있었는데 그걸 제대로 구현을 못 했고

다른 사람의 풀이에 가니 제일 위에 내가 원했던 구현 방법이 있었다.


import java.util.*;
import java.util.stream.*;

class Solution {
    public int[] solution(int[] arr) {
        List<Integer> arrList = new ArrayList<>();
        for(int e : arr) {
            arrList.add(e);
        }
        
        arrList.remove(arrList.stream().min(Integer::compare).get());
        return arrList.isEmpty() ? new int[]{-1} : arrList.stream().mapToInt(i -> i).toArray();
    }
}

 

나는 arr을 스트림으로 풀어서 거기서 min 뽑고 그걸 배열에서 바로 지우고 싶었다.

그런데

1. 배열을 바로 스트림으로 푸는 게 기억이 안 났고

2. remove를 하려면 배열로는 안 된다고 생각했다.

그래서 ArrayList를 만들었고(불필요), ArrayList를 배열로 컨버팅했다(불필요).

 

내가 원했던 딱 그 식을 보자.

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

class Solution {
  public int[] solution(int[] arr) {
      if (arr.length <= 1) return new int[]{ -1 };
      int min = Arrays.stream(arr).min().getAsInt();
      return Arrays.stream(arr).filter(i -> i != min).toArray();
  }
}

 

자! 이걸 보고 다시 기억하자!

1. 배열에서도 min을 뽑을 수 있다!

Arrays.stream(arr).min()이 가능하다! 그리고 이걸 getAsInt()로 뽑아야 한다!

2. 배열에서 remove를 할 수 없는 건 맞다!

그런데 여기처럼 Arrays.stream(arr).filter(i -> i != min)

배열의 요소가 min이 아닌 것만 뽑아서

바로 toArray하는 게 더 스마트하다!

 

발상을 전환할 필요가 있다.

'코딩테스트 연습' 카테고리의 다른 글

이진수 더하기  (0) 2024.05.05
문자열 내림차순으로 배치하기  (0) 2024.05.04
가운데 글자 가져오기  (0) 2024.05.04
없는 숫자 더하기  (0) 2024.05.02
x만큼 간격이 있는 n개의 숫자 풀이 - Lv. 1  (0) 2024.04.25