반응형

https://school.programmers.co.kr/learn/courses/30/lessons/131123

p131123 Level.3 GROUP BY

내가 시도한 방식

SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC;

정답

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE, FAVORITES) IN 
       (SELECT FOOD_TYPE, MAX(FAVORITES)
        FROM REST_INFO
        GROUP BY FOOD_TYPE)
ORDER BY FOOD_TYPE DESC

서브쿼리를 넣어야 하는 이유 : 두 컬럼의 조건이 일치해야 한다

처음 넣었던 MAX함수만으로 뽑게되면 식당 명과 일치하지 않게 되는 문제가 발생한다.

반응형
반응형
반응형
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/181914

해당 문제를 람다식 형식과 스트림 방식을 통해 구현해보았다.

이번에 자바의정석을 통해 람다와 스트림을 처음 배워봤는데, 한번에 이해될거라 생각하지 못했지만, 완벽히 이해하지 못해서 공부해보고자 프로그래머스에서 가장 쉬운 난이도인 lv0문제를 대상으로 풀어봤다.

람다식으로 풀었을 때

public int solution(String number) {
        Function<String, Integer> counter = string -> {

        int count = 0;
        for (int i = 0; i < number.length(); i++) {
            count += number.charAt(i) - '0';
        }

        return count % 9;
    };

        return counter.apply(number);
    }

 

스트림으로 풀 때의 다양한 형식

public int solution2(String number) {
        //mapToInt는 10만의 제한때문에 할 수 없음
        return IntStream.range(0, number.toCharArray().length)
                .mapToObj(i -> Character.getNumericValue(number.charAt(i)))
                .reduce(0, Integer::sum) % 9;

        number.chars()
                .map(Character::getNumericValue)
                .reduce(0, Integer::sum);
        return sum % 9;

        return number.chars()
                .map(ch -> Character.getNumericValue(ch))
                .reduce(0, (x, y) -> x + y) % 9;

        return number.chars()
                .map(Character::getNumericValue)
                .reduce(0,(x, y) -> x + y) % 9;

    }

해당 문제는 number라는 String형태로 길이가 10만까지 주어지기에 int형이나 long형태를 사용하지 못하기때문에, mapToInt, mapToLong을 사용하지 못했다

그래서 char배열을 활용해야한다고 생각까지만 하고 해결하지 못하고 gpt한테 물어봐서 해결했다

알고 보니 String에는 chars라는 스트림을 지원해서 해당 스트림을 활용하면 풀 수 있는 문제였다

한동안은 계속 헤맬듯…

반응형
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/120817

stream으로 풀 수 있는 가벼운 문제

이 문제때문에 0레벨을 만만하게 봐버렸다….

import java.util.stream.IntStream;
import java.util.Arrays;

class Solution {
    public double solution(int[] numbers) {
        IntStream intStream = Arrays.stream(numbers);

        return (double)intStream.average().orElseThrow();
    }
}

IntStream의 최종연산인 average를 통해 평균값을 구하고 doubleOptional을 orElseThrows()로 반환했다.

반응형

+ Recent posts