[2020-11-19] 제일 작은 수 제거하기

2020. 11. 19. 14:33·코딩테스트

푼 시간 : 1시간

언어 : 자바

 


 

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

 

코딩테스트 연습 - 제일 작은 수 제거하기

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1

programmers.co.kr

 

처음엔 문제가 풀리지 않아 굉장히 당황했었다.

조건중에 보면, 작은 수를 찾으라고 나와 있는데

정렬을 하고나서 내림차순으로 넣어서 해결을 했더니 오류가 나는것 이었다.

 

작은수 한개만 찾으라는게 아닌가? 싶어 한가지만이 아닌 여러가지를

넣을 수 있도록 추가했었다. 풀리지않자 보던 중 조건에 정렬을 하라는 말은 없었다.

갈피를 완전히 잘못 잡은것을 깨달았다.

자료구조를 완전히 이해하고 풀었다면 더 쉽게 풀었을텐데 하는 생각을

하고 풀었다. 굳이 배열을 하나 더 생성해서 하지 않아도 쉽게 풀수 있는 방법이 있을거라고

당연히 생각이 들기 때문이었다.

 

조건을 잘 보지않는 것 같아 좀 더 조건에 치중해야 한다고 느꼈고,

요새 자꾸 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
'코딩테스트' 카테고리의 다른 글
  • [2020-11-20] 최대공약수와 최소공배수
  • [2020-11-19] 짝수와 홀수
  • [2020-11-18] 정수 제곱근 판별도움말
  • [2020-11-17] 정수 내림차순으로 배치하기
jun96
jun96
프로그래밍 공부
  • jun96
    jun의 공부노트
    jun96
  • 전체
    오늘
    어제
    • 분류 전체보기 (66)
      • Spring (6)
        • 개념 (3)
        • 에러 (1)
      • Java (1)
      • Book (20)
        • 모던 자바 인 액션 (12)
        • 디자인 패턴의 아름다움 (7)
      • Algorithm (1)
      • 코딩테스트 (35)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 이력서
  • 공지사항

  • 인기 글

  • 태그

    junit5
    백준
    프로그래머스
    자바
    전자정부프레임워크
    최프
    aws배포
    DeepDive
    도커컨테이너빌드업
    Algorithm
    모던자바인액션
    aws에 배포하기
    wikidocs
    디자인패턴의아름다움
    Java
    스프링
    python설치
    datetime
    아직 미완성
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jun96
[2020-11-19] 제일 작은 수 제거하기
상단으로

티스토리툴바