본문 바로가기
(2024-10) 스파르타 내일배움캠프 - 백엔드/TIL

(2024-11-22) TIL

by 어뫄어뫄 2024. 11. 22.

 

1.데일리 문제 풀이

class Solution {
    public String[] solution(String[] strings, int n) {
        qsort(strings, n);
        return strings;
    }

    public static void qsort(String[] strings, int n){
        qsort(strings, n, 0, strings.length - 1);
    }

    private static void qsort(String[] strings, int n, int start, int end){
        if (start >= end){
            return;
        }

        int pivot = start;
        int lo = start + 1;
        int hi = end;

        while (lo <= hi){
            while (lo <= end && isLefterThan(n, strings[lo], strings[pivot])){
                lo++;
            }
            while (hi > start && !(isLefterThan(n, strings[hi], strings[pivot]))){
                hi--;
            }
            if (lo > hi){
                swap(strings, hi, pivot);
            } else{
                swap(strings, lo, hi);
            }
        }

        qsort(strings, n, start, hi - 1);
        qsort(strings, n, hi + 1, end);
    }


    private static boolean isLefterThan(int n, String left, String right){
        if(left.charAt(n) < right.charAt(n)){
            return true;
        }
        if(left.charAt(n) == right.charAt(n)){
            if (left.compareTo(right) < 0){
                return true;
            }
        }

        return false;
    }

    private static void swap(String[] arr, int i, int j){
        String temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }


}

 

다른 사람들의 풀이를 보니 sort기능이 구현된 게 많다는 걸 느꼈다.

java.util.Arrys의 sort 메서드(배열과 Comparator 입력)

java.util.Collections의 sort 메서드 등이 있었다

 

 

2.과제 트러블슈팅

 

계산기 과제를 수행하면서 도전 과정을 수행하게 되었다.

이때 도전 Lv2를 수행하며 기존 문제를 알았다.

기존에는 kiosk 하나를 생성할 때 메뉴 목록(menus)를 전역(static)으로 생성하고, 항목을 매 번 추가했다.

그리고 menuItem을 고를 때 그 안에서 get을 통해 얻은 menuItem 항목을 장바구니에 저장했다.

 

문제는 이게 초기에 메모리를 할당(new)한 친구들이 그대로 저장된다는 점이다.

주문표의 menuItem과 장바구니에 담긴 menuItem이 같은 주소를 가리키고 있으니 문제 소지가 많았다.

당장 할인을 해서 price 정보를 바꾸면 메뉴판에 표시되는 가격도 바뀌게 되었다.

 

그에 따라 menuItem에 clonable을 구현하고, clone()을 상속받았다. 그리고 그 과정을 에러핸들링 하게 되었다.