[2020-11-19] 제일 작은 수 제거하기
2020. 11. 19. 14:33ㆍ코딩테스트
푼 시간 : 1시간
언어 : 자바
programmers.co.kr/learn/courses/30/lessons/12935
처음엔 문제가 풀리지 않아 굉장히 당황했었다.
조건중에 보면, 작은 수를 찾으라고 나와 있는데
정렬을 하고나서 내림차순으로 넣어서 해결을 했더니 오류가 나는것 이었다.
작은수 한개만 찾으라는게 아닌가? 싶어 한가지만이 아닌 여러가지를
넣을 수 있도록 추가했었다. 풀리지않자 보던 중 조건에 정렬을 하라는 말은 없었다.
갈피를 완전히 잘못 잡은것을 깨달았다.
자료구조를 완전히 이해하고 풀었다면 더 쉽게 풀었을텐데 하는 생각을
하고 풀었다. 굳이 배열을 하나 더 생성해서 하지 않아도 쉽게 풀수 있는 방법이 있을거라고
당연히 생각이 들기 때문이었다.
조건을 잘 보지않는 것 같아 좀 더 조건에 치중해야 한다고 느꼈고,
요새 자꾸 for문에 이상한 습관이 들었는데, arr.length-1을 넣는 습관이다.
얼른 다시 고쳐야겠다.
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
int[] answer = {};
int[] tmp = Arrays.copyOf(arr, arr.length);
// 올림차순으로 정렬 할 배열
Arrays.sort(arr);
// 올림차순 정렬
if(arr.length<=1){
// 1이거나 1보다 작을경우 -1을 리턴하도록 한다.
answer=new int[1];
answer[0]=(-1);
}
else{
int cnt=0;
int mn=arr[0];
for(int i=0; i<arr.length; i++){
if(mn==tmp[i]){
// minimum이 tmp[i]와 같을경우
tmp[i]=(-1);
// -1을 넣어준다. (0이 있을수도 있기 때문에)
cnt++;
}
}
answer=new int[arr.length-cnt];
// arr의 길이-cnt를 해 길이를 잡는다.
cnt=0;
for(int i=0; i<arr.length; i++){
if(tmp[i]!=(-1)){
// -1이 아닐경우 answer에 넣는다.
answer[cnt]=tmp[i];
cnt++;
}
}
}
return answer;
}
}
요새 좀 쉬운 문제를 풀다가 오랜만에 어렵지는? 않았지만
문제를 깔끔하게 풀고싶기도 하고, 조건이 신경쓸 것이 많았던 문제 같다.
'코딩테스트' 카테고리의 다른 글
[2020-11-20] 최대공약수와 최소공배수 (0) | 2020.11.20 |
---|---|
[2020-11-19] 짝수와 홀수 (0) | 2020.11.19 |
[2020-11-18] 정수 제곱근 판별도움말 (0) | 2020.11.18 |
[2020-11-17] 정수 내림차순으로 배치하기 (0) | 2020.11.17 |
[2020-11-16] 이상한 문자 만들기 (0) | 2020.11.16 |