N

(Leet Code JS)Find Original Array From Doubled Array 본문

Leet Code 알고리즘

(Leet Code JS)Find Original Array From Doubled Array

naeunchan 2022. 1. 12. 11:06
728x90
반응형

https://leetcode.com/problems/find-original-array-from-doubled-array/

 

Find Original Array From Doubled Array - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

Greedy 알고리즘 적용.

 

changed 배열을 오름차순으로 정렬한 후 순회를 한다.

순회를 하면서 number배열에 changed[i]의 갯수를 카운팅한다.

 

다음 for문으로 다시 changed를 순회한다.

현재 changed[i]의 수와 changed[i] * 2의 수가 number 배열에서 1개 이상일 때 후보군이 된다.

현재 방문한 원소가 후보군에 속한다면 해당 숫자의 카운트를 1개 내려준다.

이후 0인지 아닌지 판별하여 2배에 해당하는 카운팅을 내려준다.

0은 2를 곱해도 0이기 때문에 number[0]이 1개 이상인지 확인한 후, true라면 카운트를 내려주고 answer에 0을 넣어준다.

0이 아닌 숫자는 2를 곱한 수의 개수가 1개 이상인지 확인한 후, true라면 카운트를 내려주고 answer에 해당 수를 넣어준다.

 

리턴값은 answer의 길이 * 2가 changed의 길이와 같으면 answer를, 그렇지 않다면 빈 배열 []을 리턴하면 된다.

const findOriginalArray = (changed) => {
    const length = changed.length;
    const number = Array(100001).fill(0);
    const answer = [];
    
    changed.sort((a, b) => a - b);
    
    for(let i = 0; i < length; i++){
        number[changed[i]]++;
    }
    
    for(let i = 0; i < length; i++){
        if(number[changed[i]] && number[changed[i] * 2]){
            number[changed[i]]--;
            
            if(changed[i]){
                number[changed[i] * 2]--;
                answer.push(changed[i]);
            } else{
                if(number[0]){
                    number[0]--;
                    answer.push(0);
                }
            }
        }
    }
    
    return answer.length * 2 === length ? answer : [];
};
728x90
반응형

'Leet Code 알고리즘' 카테고리의 다른 글

(Leet Code JS)Minimum Path Sum  (0) 2022.01.20
(Leet Code JS)Network Delay Time  (0) 2022.01.20
(Leet Code JS)Snapshot Array  (0) 2022.01.10
(Leet Code JS)Minesweeper  (0) 2021.12.21
(Leet Code JS)Reorganize String  (0) 2021.11.27