2023.01.13 TIL

mil nil·2023년 1월 13일
0

TIL (Today I Learned)

목록 보기
52/74

SQL 프로그래머스 연습

즐겨찾기가 가장 많은 식당 정보 출력하기

문제
REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름,
즐겨찾기수를 조회하는 SQL문을 작성해주세요.이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.

나의 답

SELECT ri.FOOD_TYPE,ri.REST_ID,ri.REST_NAME,ri.FAVORITES
FROM (select food_type, max(favorites) as max -- 음식 종류별 가장 높은 좋아요 수
     from REST_INFO
     group by food_type) sub
inner join rest_info ri
     on sub.food_type = ri.food_type -- 음식 종류 매칭
     and sub.max = ri.favorites -- subquery에서 찾은 가장 높은 좋아요 매칭
GROUP BY ri.FOOD_TYPE
ORDER BY ri.FOOD_TYPE DESC

지금껏 문제들 중에서 join을 하기 위해서 두 개의 컬럼을 on시키는 것을 처음봐서 한참 고민하였다가 다른 사람의 풀이를 보고 이런 방법도 있음을 알았다.

프로그래머스 알고리즘 공부

3진법 뒤집기

나의 답

class Solution {
    public int solution(int n) {
        String Ternary = "";
        while (n > 0) {
            Ternary += n % 3;	//3진법 아래자릿수부터 넣기
            n /= 3;
        }
        return Integer.parseInt(Ternary,3);
    }
}

String을 활용하여서 시간이 많이 걸렸다

문자열로 전환 과정에서 시간이 많이 사용되는 것 같다. 승범님이 한 방법을 따라 리스트에 담는 방식으로도 진행해보았다.

import java.util.*;

class Solution {
    public int solution(int n) {
        int answer = 0;
        ArrayList<Integer> toTernary = new ArrayList<Integer>();
        while (n > 0) {
            toTernary.add(n % 3);
            n /= 3;
        }
        int digit = 1;
        for (int i = toTernary.size() - 1; i >= 0; i--) {
            answer += toTernary.get(i) * digit;
            digit *= 3;
        }
        return answer;
    }
}

시간이 거의 300분의 1로 획기적으로 단축된 것을 확인할 수 있다. 로직에서 반드시 필요한 부분이 아니라면 문자열은 사용하지 않는 것이 맞는 것 같다.

소수 찾기
나의 답

class Solution {
    public int solution(int n) {
        int countAll = 0;
        for (int i = 2; i <= n; i++) {
            int j = 2;
            boolean count = true;
            while (j <= (int)Math.sqrt(i)) {
                if (i % j == 0) {
                    count = false;
                    break;
                }
                j++;
            }
            if (count) {
                countAll++;
            }
        }
        return countAll;
    }
}

에라스토테네스의 체를 적용한 방법

자바(java) 코드의 실행 시간 구하기(시간 측정)

SQL 강의 듣기 (SQL 실시간 강의 + 엑셀보다 쉬운 SQL)
https://teamsparta.notion.site/5-6ca7d5a20f424aefaaf5ba74a7074131

profile
자바 배우는 사람

0개의 댓글