LeetCode - 888

이정우·2021년 11월 24일
1

LeetCode

목록 보기
3/7

888. Fair Candy Swap

https://leetcode.com/problems/fair-candy-swap/

엘리스와 밥은 여러 개의 사탕이 든 상자를 가지고 있다. 이 때, 서로가 가진 상자를 교환한 뒤 각자가 가진 사탕의 총합이 같아지도록 만들어야 한다.

이를 위해서는 엘리스가 가진 사탕의 합을 alice, 밥이 가진 사탕의 합을 bob, 교환할 상자를 각각 a, b라고 했을 때, 다음과 같은 공식이 성립하는 ab를 찾아야 한다.

alice - a + b = bob - b + a

사실상 이 공식만 유추할 수 있으면 쉽게 해결할 수 있는 문제라서 자바의 스트림을 연습하려고 어떻게든 쓰기는 했는데, 코드가 깔끔하지는 않다.

더 공부해서 예쁘게 코드를 작성해야겠다...


class Solution {
    public int[] fairCandySwap(int[] aliceSizes, int[] bobSizes) {
        boolean[] bobCandy = new boolean[100001];

        int alice = Arrays.stream(aliceSizes).sum();
        int bob = Arrays.stream(bobSizes).peek(b -> bobCandy[b] = true).sum();

        int answer = Arrays.stream(aliceSizes).filter(a -> a - (alice - bob) / 2 > 0 && a - (alice - bob) / 2 <= 100000).
            filter(a -> bobCandy[a - (alice - bob) / 2]).findFirst().getAsInt();

        return new int[]{answer, answer - (alice - bob) / 2};
    }
}

https://leetcode.com/submissions/detail/592008885/
https://github.com/sorious77/LeetCode/blob/main/code/888.java

0개의 댓글