본문 바로가기
JAVA/Programmers

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

by tripleup 2023. 8. 4.
728x90
반응형

[프로그래머스] 코딩테스트 연습 -> 연습문제 -> 제일 작은 수 제거하기 

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


해결 과정

 

처음에는 배열에서 어떤 원소를 제거해야 한다고 하여, StringBuilder를 써야 하나 싶었다.

하지만 사용하지 않고 한번 풀어봤더니 풀리는 방법을 찾을 수 있었다.

 

먼저 arr의 길이가 1일 경우를 먼저 제거해 준다. 이때는 answer 배열을 그냥 -1만 갖도록 초기화 해주면 된다.

 

다음 위 조건이 걸리지 않았을 때의 answer 배열을 다시 선언해 주는데, 이때 배열의 길이는 arr의 길이에서 원소 하나가 제거된 길이일 것이므로 -1을 해준다. 또한 제일 작은 값을 찾기 위해 arr의 원소 중 하나로 min을 선언하여 초기화해준다.

 

다음 반복문으로 돌면서 배열 arr에서 min 값을 찾아준다.

 

그렇다면 마지막으로 answer배열을 채워보도록 하겠다.

일단 answer배열의 인덱스를 책임져 줄 변수 k를 선언한다.

 

다음 반복문을 돌면서 하나씩 채워주면 되는데, arr배열에 min 값이 있다면 answer에는 그 값을 넣으면 안된다.

 

이걸 식으로 정리하여 arr[i] == min 일 때는, continue를 사용하여 answer에 추가하는 과정을 건너뛰어 준다.

딱히 위 조건문에 걸리지 않으면 단순히 answer[k++] 를 해주면서 arr의 원소를 하나씩 넣어주면 된다.

 

마지막으로 answer을 return 하면 풀이가 완료된다.

 

소스 코드

 

class Solution {
    public int[] solution(int[] arr) {
        
        if (arr.length == 1 ) {
            int[] answer = {-1};
            return answer;
        }
        
        int[] answer = new int[arr.length-1];
        int min = arr[0];
        
        for (int i=0; i<arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
            }
        }
        
        int k = 0;
        for (int i=0; i<arr.length; i++) {
            if (arr[i] == min) {
                continue;
            }
            answer[k++] = arr[i];
        }
        return answer;
    }
}

 


728x90
반응형

댓글