본문 바로가기
Java/AlgorithmPS

프로그래머스) 제일 작은 수 제거하기 자바 문제 풀이

by NH_club 2023. 6. 18.

●문제: 제일 작은 수 제거하기

문제 링크:

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

 

프로그래머스

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

programmers.co.kr

소스코드:

https://github.com/NHclub/algorithm/blob/main/src/_06_18/Problem26.java

★문제 해결 접근 아이디어

    오름차순으로 정렬 후 첫 번째 요소 제거.

  1. 첫 번째 실패
    아마 정렬하는 과정에서 원래 있던 요소들의 위치가 변경되어서 실패가 뜨는 것 같음.
    재시도: 정렬 후 첫 번째 요소의 값만 취득 후 원래 배열에서 그 값만 제외한 값을 answer 할당 하기
  2. 두 번째 실패
    런타임 에러 발생 허나 이유를 찾지 못함..
    재시도: 디버깅을 통해 여러 테스트 케이스 확인해보기
int Min = lsArr.get(0);
for (int i = 0; i < arr.length; i++) {
    if (Min == arr[i]){
        continue;
    }else{answer[i] = arr[i];}
    
}

Min 값과 arr[i]의 값이 같으면 건너뛰는 과정에서 answer에 값이 생략되게 됨.
예를 들어 5 크기를 가진 배열에 Min 값이 3번째에 있다면 반복문은 3을 건너뛰게 되면서 answer[3] 값은 할당되지 못했는데 answer[4]를 할당하려 하니 ArrayIndexOutOfBoundsException이 발생함
재시도: answer인덱스를 따로 선언해서 else 구문이 실행 되면 answer의 인덱스를 증가 시키기

 

해결 완료.

 

다른 사람 풀이 보고 느낀점:
배열을 돌면서 최솟값을 저장하는 알고리즘을 보고 놀람.. 최솟값 찾을 때 많이 유용할 알고리즘일 것 같음

int minIndex=0;
for(int i=0;i<arr.length;i++){
  if(arr[minIndex]>arr[i]){
      minIndex = i;
  }