퀴즈

공통 코드

public enum CaloricLevel { DIET, NORMAL, FAT }

public class Dish {

    private final String name;
    private final boolean vegetarian;
    private final int calories;
    private final Type type;

    public Dish(String name, boolean vegetarian, int calories, Type type) {
        this.name = name;
        this.vegetarian = vegetarian;
        this.calories = calories;
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public boolean isVegetarian() {
        return vegetarian;
    }

    public int getCalories() {
        return calories;
    }

    public Type getType() {
        return type;
    }

    @Override
    public String toString() {
        return name;
    }

    public enum Type {
        MEAT,
        FISH,
        OTHER
    }

    public static final List<Dish> menu = asList(
        new Dish("pork", false, 800, Dish.Type.MEAT),
        new Dish("beef", false, 700, Dish.Type.MEAT),
        new Dish("chicken", false, 400, Dish.Type.MEAT),
        new Dish("french fries", true, 530, Dish.Type.OTHER),
        new Dish("rice", true, 350, Dish.Type.OTHER),
        new Dish("season fruit", true, 120, Dish.Type.OTHER),
        new Dish("pizza", true, 550, Dish.Type.OTHER),
        new Dish("prawns", false, 400, Dish.Type.FISH),
        new Dish("salmon", false, 450, Dish.Type.FISH)
    );

    public static final Map<String, List<String>> dishTags = new HashMap<>();
    static {
        dishTags.put("pork", asList("greasy", "salty"));
        dishTags.put("beef", asList("salty", "roasted"));
        dishTags.put("chicken", asList("fried", "crisp"));
        dishTags.put("french fries", asList("greasy", "fried"));
        dishTags.put("rice", asList("light", "natural"));
        dishTags.put("season fruit", asList("fresh", "natural"));
        dishTags.put("pizza", asList("tasty", "salty"));
        dishTags.put("prawns", asList("tasty", "roasted"));
        dishTags.put("salmon", asList("delicious", "fresh"));
    }
}
  • 문제: collect를 사용하여, 음식들의 총 갯수를 구하시오.

    • 답:

  • 문제: Collectors의 정적 팩토리 메소드를 사용하여, 최대 칼로리를 가진 음식을 찾으시오.

    • 답:

  • 문제: 모든 음식들의 칼로리 합계를 구하시오. (여러 방안 생각하기)

    • 답:

  • 문제: 모든 음식들의 칼로리 평균을 구하시오.

    • 답:

  • 문제: 음식들 칼로리의 count, sum, min, average, max를 구하는 방법은?

    • 답:

  • 문제: 모든 음식들의 이름을 콤마로 연결하시오.

    • 답:

  • 문제: 음식들의 타입에 따라, Dish를 넣으시오. (Map 사용하기)

    • 답:

  • 문제: 칼로리가 500이 넘는 메뉴들을 타입별로 구분하려는 코드이다. 문제는 FISH 타입에 칼로리가 500을 넘는 것이 없어서 키로 들어가지 않는다. 해결방법은?

    • 답:

  • 문제: 맨위 Dish 클래스안을 보면, dishTags가 있다. 다음과 같은 결과 값을 만들어라.

    • 답:

  • 문제: 음식 타입 별 개수를 맵에 담으시오.

    • 답:

  • 문제: 음식 타입(MEAT, FISH 등)에 따라 그루핑 후, 또 다시 칼로리에 따라 (400 이하는 DIET, 700 이하는 NORMAL, 그 이상은 FAT) 그루핑을 하고싶다. 코드를 작성하여, Map<Dish.Type, Map<CaloricLevel, List<Dish>>>에 담으시오.

    • 답:

  • 문제: 음식 타입 별 가장 높은 칼로리를 가진 요리 찾아 맵에 넣으시오. (결과: {FISH=Optional[salmon], OTHER=Optional[pizza], MEAT=Optional[pork]})

    • 답:

  • 문제: 음식 타입 별 총 칼로리수를 Map에 담으시오.

    • 답:

  • 문제: 음식 타입 별 그루핑 후, 각 음식들의 칼로리 레벨들을 맵에 저장하시오.

    • 답:

  • 문제: 채식 요리와 채식이 아닌 요리를 분할하여 맵에 담으시오.

    • 답:

  • 문제: 채식 요리와 채식이 아닌 요리를 분할 후 음식 타입에 따라 분류하시오.

    • 답:

  • 문제: 채식 요리와 채식이 아닌 요리를 분할 후 제일 칼로리가 높은 음식을 뽑으시오.

    • 답:

  • 문제: 다음 코드의 문제점은 무엇인가?

    • 답: partitioningBy는 부울린을 요구한다 getType은 부울린을 반화하지 않으니, 컴파일 불가

  • 문제: 스트림을 이용해 N이 소수인지 판별해보자.

    • 답:

  • 문제: 숫자 N까지 소수와 비소수를 분류하여, Map에 담아보자.

    • 답:

  • 223 쪽부터 추가 문제 만들기

  • 문제:

    • 답:

  • 문제:

    • 답:

  • 문제:

    • 답:

  • 문제:

    • 답:

  • 문제:

    • 답:

  • 문제: 다음 코드가 잘못된 이유는?

    • 답: reduce 메서드는 누적자로 사용된 리스트를 변환시키므로 잘못 활용한 예이다. collect가 도출한 결과를 누적하는 컨테이너를 바꾸도록 설계되었기에, collect를 사용해야한다. (즉, 가변 컨테이너 관련 작업이면서 병렬성 확보이면 collect 사용)

  • 문제: 아래 코드를 reducing을 사용하여 바꾼 올바른 사례를 모두 고르시오.

    • 답: 1, 3 (2번은 컴파일 에러 - 이유: 람다 안에 같은 형을 반환해야 하는데 요리를 받아 문자열 리턴)

  • 문제: 다음 코드는 500 칼로리 보다 낮은 FISH 메뉴들이 안들어간다. 해결방법에 대해 이야기 하시오.

    • 답: 자바 9 버전의 filtering을 사용한다.

퀴즈 공용 코드

  • 문제: 통화별로 트랜잭션을 그룹화한 다음에 해당 통화로 일어난 모든 트랜잭션 합계를 계산하시오(Map<Currency, Integer>)

    • 답:

  • 문제: 트랜잭션을 비싼 트랜잭션과 저렴한 트랜잭션 두 그룹으로 분류하시오(Map<Boolean, List>)

    • 답:

  • 문제: 트랜잭션을 도시 등 다수준으로 그룹화하시오. 그리고 각 트랜잭션이 비싼지 저렴한지 구분하시오(Map<String, Map<Boolean, List>)

    • 답:

Last updated