[LeetCode] Fair Candy Swap

아르당·2026년 3월 9일

LeetCode

목록 보기
191/213
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

앨리스와 밥은 사탕의 총 개수를 다르게 갖고 있다. 두 개의 정수 배열 aliceSizes와 bobSizes가 주어진다. aliceSizes[i]는 앨리스가 가지고 있는 i번째 사탕 상자의 사탕 개수이고, bobSizes[j]는 밥이 가지고 있는 j번째 사탕 상자의 사탕 개수이다.

두 사람은 친구 사이이고, 각자 사탕 한 상자씩 교환을 하여 두 사람이 가진 사탕의 총 개수가 같아지도록 하고 싶다. 한 사람이 가진 사탕의 총 개수는 각자 가지고 있는 사탕 상자 두개에 들어있는 사탕의 개수를 모두 더한 값이다.

정수 배열 answer를 반환해라. answer[0]은 앨리스가 교환해야 하는 상자 안의 사탕 개수이고, answer[1]은 밥이 교환해야하는 상자 안의 사탕 개수이다. answer가 여러 개인 경우, 그 중 하나를 반환할 수 있다. 적어도 하나의 answer는 존재한다.

Example

#1
Input: aliceSizes = [1, 1], bobSizes = [2, 2]
Output: [1, 2]

#2
Input: aliceSizes = [1, 2], bobSizes = [2, 3]
Output: [1, 2]

#3
Input: aliceSizes = [2], bobSizes = [1, 3]
Output: [2, 3]

Constraints

  • 1 <= aliceSizes.length, bobSizes.length <= 10^4
  • 1 <= aliceSizes[i], bobSizes[j] <= 10^5
  • 앨리스와 밥은 사탕의 총 개수를 다르게 갖는다.
  • 주어진 압력에 대해 적어도 하나의 유효한 답이 있다.

Solved

class Solution {
    public int[] fairCandySwap(int[] aliceSizes, int[] bobSizes) {
        int dif = (IntStream.of(aliceSizes).sum() - IntStream.of(bobSizes).sum()) / 2;
        HashSet<Integer> set = new HashSet<>();

        for(int aliceSize : aliceSizes){
            set.add(aliceSize);
        }

        for(int bobSize : bobSizes){
            if(set.contains(bobSize + dif)){
                return new int[]{bobSize + dif, bobSize};
            }
        }

        return new int[0];
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글