코린이의 소소한 공부노트

[LeetCode/Easy] 645. Set Mismatch 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 645. Set Mismatch

무지맘 2023. 3. 10. 10:42

1. Input

1) int[] nums

- nums에는 1부터 n까지의 수가 담겨있다.

- n == nums.length

 

2. Output

1) nums의 요소 중 2번 나오는 숫자와 빼먹은 숫자가 차례대로 담긴 int[]를 반환

 

3. Constraint

1) 2 <= nums.length <= 10^4

2) 1 <= nums[i] <= 10^4

 

4. Example

Input: nums = [1,2,2,4] -> Output: [2,3]

 

5. Code

1) 첫 코드(2023/03/10)

int[] n = new int[nums.length];
int[] answer = new int[2];
for(int i=0 ; i<nums.length ; i++){
    n[nums[i]-1]++;
    if(n[nums[i]-1]==2) answer[0] = nums[i];
}
for(int i=0 ; i<n.length ; i++){
    if(n[i]==0){
        answer[1] = i+1;
        break;
    }
}
return answer;

2) hashmap을 이용해서 다시 해본 코드(2023/03/10)

int[] answer = new int[2];
HashMap<Integer,Integer> m = new HashMap<Integer,Integer>();
for(int n : nums)
    m.put(n, m.getOrDefault(n,0)+1);
Iterator it = m.entrySet().iterator();
int missing = nums.length*(nums.length+1)/2;
while(it.hasNext()){
    Map.Entry e = (Map.Entry)it.next();
    int i = (int)e.getKey();
    if((int)e.getValue()==2)
        answer[0] = i;
    missing -= i;
}
answer[1] = missing;
return answer;

- 1번 코드보다 훨씬 비효율적이었다.