TIL

[코테연습] 1346. Check If N and Its Double Exist

크라00 2024. 12. 1. 22:24

https://leetcode.com/problems/check-if-n-and-its-double-exist/?envType=daily-question&envId=2024-12-01

 

문제타입

  • 배열 문제 (Array Problem)
  • 해시셋을 활용한 탐색 문제 (Set-based search problem)

문제분석

  • 주어진 배열에서 각 원소 n에 대해 2n 또는 n/2가 배열에 존재하는지 확인하는 문제.
  • 배열에 있는 두 수가 서로 "배수 관계"에 있으면 true를 반환하고, 그렇지 않으면 false를 반환.
  • 주어진 배열에서 중복된 원소를 고려할 필요는 없으며, 효율적인 방법을 위해 해시셋을 사용할 수 있다.

문제풀이

  • 배열을 순회하며 각 숫자에 대해 조건을 확인:
    • 해당 숫자의 두 배(num * 2)가 이미 해시셋에 있는지 확인.
    • 해당 숫자가 짝수일 경우, 그 절반(num / 2)이 해시셋에 있는지 확인.
    • 위 조건 중 하나라도 만족하면 true를 반환.
    • 조건을 만족하지 않으면 현재 숫자를 해시셋에 추가하고 계속 진행.
  • 전체 배열을 확인한 후 조건을 만족하는 쌍이 없다면 false를 반환.

 

> java

public class Solution {
    public boolean checkIfExist(int[] arr) {
        HashSet<Integer> set = new HashSet<>();
        for (int num : arr) {
            if (set.contains(num * 2) || (num % 2 == 0 && set.contains(num / 2))) {
                return true;
            }
            set.add(num);
        }
        return false;
    }
}