Computer Engineering/알고리즘 테스트

프로그래머스 코딩테스트 문제: 제일 작은 수 제거하기

말하는호구마 2020. 3. 4. 23:41

프로그래머스 코딩테스트중 level1에 해당하는 문제이다.

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

 

 

level1이고 딱보기에 쉬워보여 막 들이댔다가 큰코다쳤다....

문제를 잘못파악해서 정렬된 상태로 풀뻔했기 때문...!

 

 

 

 

익숙한 ArrayList로 풀고싶었지만 단순 배열을 사용하고 순수 코딩만을 이용하는 것이 좋을 것 같아 최대한 배열과 코딩으로만 풀고자 했다.

배열만으로 코딩을 하는 것이 너무 오랜만이라 좀 헷갈렸다.

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

 

 

이문제의 풀이에서는 중요한 점은 contiune와 이에 영향받는 i,j를 적절하게 조절하는 것이다.

특히 i부분이 헷갈릴 수 있다.

i는 for문을 조절하는 변수이고 j는 단순 변수임을 계속 명심해야한다. 

i는 for문에 의하여 한번 돌면 계속 증가하기 때문에, min을 만났을 때 증가하지 않고 그 index를 유지하고 싶다면 i--연산이 필수이다.

하지만 j는 for문 한번을 돌때마다 증가해줘야하고 min을 만났을 때는 코드 앞쪽에서 한번더 증가해주어야 한다. 

 

 

어렵진 않지만 꽤나 헷갈리는 문제!