Computer Engineering/알고리즘 테스트
프로그래머스 코딩테스트 문제: 제일 작은 수 제거하기
말하는호구마
2020. 3. 4. 23:41
프로그래머스 코딩테스트중 level1에 해당하는 문제이다.
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을 만났을 때는 코드 앞쪽에서 한번더 증가해주어야 한다.
어렵진 않지만 꽤나 헷갈리는 문제!