Skip to content

Conversation

@wch2208
Copy link
Contributor

@wch2208 wch2208 commented Dec 3, 2024

πŸ“Œ ν‘Ό 문제


πŸ“ κ°„λ‹¨ν•œ 풀이 κ³Όμ •

7. Reverse integer

  • 음수 μ—¬λΆ€λ₯Ό μ²΄ν¬ν•œ λ’€ λ¬Έμžμ—΄λ‘œ λ§Œλ“€μ–΄ λ’€μ§‘μ—ˆμŠ΅λ‹ˆλ‹€.
  • 32λΉ„νŠΈ λ²”μœ„λ₯Ό ν™•μΈν•˜λŠ” λΆ€λΆ„μ—μ„œ λ§‰ν˜€μ„œ ν•™μŠ΅ν–ˆλ„€μš”
/**
 * @param {number} x
 * @return {number}
 */
var reverse = function (x) {
    const isNegative = x < 0;

    const reversed = Math.abs(x).toString().split('').reverse().join('');

    const result = Number(reversed);

    // 32λΉ„νŠΈ λ²”μœ„λ₯Ό λ„˜μ–΄κ°€λŠ”μ§€ 확인 μ΅œμ†Œκ°’λ³΄λ‹€ 더 μž‘κ±°λ‚˜ μ΅œλŒ€κ°’λ³΄λ‹€ 더 큰 경우 
    if (result < Math.pow(-2, 31) || result > Math.pow(2, 31) - 1) return 0;

    return isNegative ? -result : result;
};

// time: 18m 43s

743. Network Delay Time

  • κ·Έλž˜ν”„ μžλ£Œκ΅¬μ£ μ™€ λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜μ„ ν•™μŠ΅ν–ˆμŠ΅λ‹ˆλ‹€.
/**
 * @param {number[][]} times
 * @param {number} n
 * @param {number} k
 * @return {number}
 */
var networkDelayTime = function(times, n, k) {
    // λ¬Έμ œμ΄ν•΄: 숫자 λ¦¬μŠ€νŠΈμ™€ n, kκ°€ μž…λ ₯λœλ‹€. kλΆ€ν„° μ‹œμž‘ν•΄μ„œ λͺ¨λ“  λ…Έλ“œμ— μ‹ ν˜Έλ₯Ό λ³΄λ‚΄λŠ”λ° κ±Έλ¦¬λŠ” μ΅œμ†Œ μ‹œκ°„μ„ κ΅¬ν•œλ‹€ λͺ¨λ“  λ…Έλ“œμ— 도달할 수 μ—†λ‹€λ©΄ -1 
    // times[i] = (ui, vi, wi) 이 ν˜•νƒœλ₯Ό 보고 κ·Έλž˜ν”„ μžλ£Œκ΅¬μ‘°μž„μ„ νŒŒμ•…ν•  수 μžˆλ‹€.
    // μ‹œμž‘μ  ν•˜λ‚˜ + λͺ¨λ“  λ…Έλ“œκΉŒμ§€μ˜ μ΅œλ‹¨ 거리/μ‹œκ°„ + μ–‘μ˜ κ°€μ€‘μΉ˜, 이 쑰건으둜 그리디 μ•Œκ³ λ¦¬μ¦˜ 쀑 λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•  수 μžˆλ‹€. 

    // 1. κ·Έλž˜ν”„ 생성
    const graph = new Map();
    
    for (let i = 1; i <= n; i++) {
        graph.set(i, []);
    };
    // console.log(graph)
    // Map(4) { 1 => [], 2 => [], 3 => [], 4 => [] }
    
    for (const [u, v, w] of times) {
        graph.get(u).push([v, w]);
    };
    // console.log(graph)
    // Map(3) { 1 => [], 2 => [ [ 1, 1 ], [ 3, 1 ] ], 3 => [ [ 4, 1 ] ] }

    // 2. 거리 λ°°μ—΄ μ΄ˆκΈ°ν™” 
    const distances = new Array(n + 1).fill(Infinity);
    distances[k] = 0;

    // console.log(distances)
    // [ Infinity, Infinity, 0, Infinity, Infinity ]

    // 3. λ°©λ¬Έ λ°°μ—΄ μ΄ˆκΈ°ν™”
    const visited = new Array(n + 1).fill(false);
    // console.log(visited)
    // [ false, false, false, false, false ]

    // 4. λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„ 
    for (let i = 1; i <= n; i++) {
        // 4-1. ν˜„μž¬ μ΅œλ‹¨ 거리인 λ…Έλ“œ μ°ΎκΈ° 
        let minDist = Infinity;
        let minNode = -1;
        for (let node = 1; node <= n; node++) {
            if (!visited[node] && distances[node] < minDist) {
                minDist = distances[node];
                minNode = node;
            };
        };

        // 4-2. 도달할 수 μ—†λŠ” λ…Έλ“œκ°€ μžˆλŠ” 경우
        if (minNode === -1) break;

        // 4-3. λ…Έλ“œ λ°©λ¬Έ 처리
        visited[minNode] = true;

        // 4-4. μΈμ ‘ν•œ λ…Έλ“œλ“€μ˜ 거리 κ°±μ‹ 
        for (const [nextNode, time] of graph.get(minNode)) {
            const newDist = distances[minNode] + time;
            if (newDist < distances[nextNode]) {
                distances[nextNode] = newDist;
            }
        }
    }

    // 5. κ²°κ³Ό 계산
    let maxDist = 0;
    for (let i = 1; i <= n; i++) {
        if (distances[i] === Infinity) return -1;
        maxDist = Math.max(maxDist, distances[i]);
    }

    return maxDist;
};

// time: 1h 14m

39. Combination Sum

  • μž¬κ·€μ™€ λ°±νŠΈλž˜ν‚Ή κ°œλ…μ„ ν•™μŠ΅ν–ˆμŠ΅λ‹ˆλ‹€.
/**
 * @param {number[]} candidates
 * @param {number} target
 * @return {number[][]}
 */
var combinationSum = function (candidates, target) {
    const result = [];

    const findCombinations = (remaining, current, start) => {
        // μ’…λ£Œμ‘°κ±΄
        if (remaining === 0) {
            result.push([...current]);
            return;
        }

        if (remaining < 0) return;

        // ν˜„μž¬ λ‹¨κ³„μ—μ„œ ν•  일
        for (let i = start; i < candidates.length; i++) {
            // 1. ν˜„μž¬ 숫자λ₯Ό 선택
            current.push(candidates[i]);

            // 2. 이 숫자λ₯Ό μ„ νƒν•œ μƒνƒœμ—μ„œ μž¬κ·€ 호좜
            findCombinations(remaining - candidates[i], current, i);

            // 3. λ°±νŠΈλž˜ν‚Ή: ν˜„μž¬ 숫자λ₯Ό μ œκ±°ν•˜κ³  λ‹€λ₯Έ κ°€λŠ₯μ„± μ‹œλ„
            current.pop();
        }
    }

    findCombinations(target, [], 0);

    return result;
};

// time: 44m

@wch2208 wch2208 self-assigned this Dec 3, 2024
@oris8 oris8 requested review from Berrnuda and hyunow December 3, 2024 17:42
@oris8 oris8 merged commit 88a7e5b into master Dec 10, 2024
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants