항해99/TIL | WIL

2023.02.01 (24일)

태감새 2023. 2. 1. 23:49

Day 24


double 데이터 compare 하기

프로그래머스 42889
프로그래머스의 실패율 문제를 풀다가 double값을 정렬해야하는 상황이 발생했다.
그냥 정렬이면 sort를 해주면 되지만 정렬 기준이 복잡해서 Comprator를 구현받는 클래스를 하나 만들기로 했다.

class SortCompartor implements Comparator<Double[]>{
    @Override
    public int compare(Double[] o1, Double[] o2) {
        if(o1[2].equals(o2[2]))
            return (int)(o1[0] - o2[0]));
        return (int)(o2[2] - o1[2]);
    }
}

double 값을 compare()메서드를 사용하지 않고 그냥 빼는 방식으로 정렬을 구현하려고 했다.
하지만 위의 코드로는 정렬이 되지 않았고 원인을 알지 못했다.

class SortCompartor implements Comparator<Double[]>{
    @Override
    public int compare(Double[] o1, Double[] o2) {
        if(o1[2].equals(o2[2]))
            return o1[0].compareTo(o2[0]);
        return o2[2].compareTo(o1[2]);
    }
}

위 코드처럼 일반적인 compareTo 메서드를 적용하면 정상적으로 작동했다.

그 이유가 무엇일까?

문제는 비교하는 double타입의 값이 있었다.
내가 비교하려는 값은 비율이여서 0 <= data <= 1 의 범위를 가진다.
그래서 뺄셈을 하면 필연적으로 0.xx의 값을 가지고 이 수를 int로 변환하면 0이 되버린다.
모든 결과가 0이 반환되었으므로 정렬이 되지 않는 것은 당연한 일이었다.

결론 : 그냥 비교할 때는 compareTo 메서드를 사용하자.

MySQL 기본 문법 정리

sqld 문제를 풀기위해서 개념 공부를 하고 있었는데 SQL을 다뤄본적이 없어서 설명이 하나도 이해가 안됐다.
그래서 MySQL을 설치해서 유튜브 강의로 기본적인 문법을 공부해보고 따라서 실습해봤다.
MySQL 기본 문법

'항해99 > TIL | WIL' 카테고리의 다른 글

2023.02.03 (26일)  (0) 2023.02.03
2023.02.02 (25일)  (0) 2023.02.02
2023.01.31 (23일)  (0) 2023.01.31
2023.01.30 (22일)  (0) 2023.01.30
WIL (2주)  (0) 2023.01.29