Skip to content

Gas StationΒ #61

@hsskey

Description

@hsskey

문제 μ„€λͺ… | Gas Station

πŸ“ μ œμ•½μ‘°κ±΄

  • n == gas.length == cost.length
  • 1 <= n <= 10^5
  • 0 <= gas[i], cost[i] <= 10^4

πŸ’‘ μ˜ˆμ‹œ

  • Input: gas = [1,2,3,4,5], cost = [3,4,5,1,2]

    • Output: 3
  • Input: gas = [2,3,4], cost = [3,4,3]

    • Output: -1

문제 ν•΄κ²° κ³Όμ •

Step 1: 문제 μ΄ν•΄ν•˜κΈ°

  • μ£Όμœ μ†Œλ₯Ό μˆœν™˜ν•˜λ©΄μ„œ 여행을 μ™„λ£Œν•  수 μžˆλŠ” μ‹œμž‘μ μ„ μ°Ύμ•„μ•Ό 함.
  • μ°¨λŸ‰μ€ 항상 빈 νƒ±ν¬λ‘œ μ‹œμž‘.
  • 각 μ£Όμœ μ†Œμ—μ„œ κ°€μŠ€λ₯Ό μΆ©μ „ν•˜κ³ , λ‹€μŒ μ£Όμœ μ†Œλ‘œ μ΄λ™ν•˜λŠ” 데 κ°€μŠ€λ₯Ό μ†Œλͺ¨.
  • μ˜ˆμ‹œλ‘œ 직접 확인해보기:
    • μ˜ˆμ‹œ 1: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
      • 인덱슀 3μ—μ„œ μ‹œμž‘ν–ˆμ„ λ•Œ μˆœν™˜ κ°€λŠ₯
    • μ˜ˆμ‹œ 2: gas = [2,3,4], cost = [3,4,3]
      • μ–΄λ””μ„œ μ‹œμž‘ν•΄λ„ μˆœν™˜ λΆˆκ°€λŠ₯

Step 2: μ ‘κ·Ό 방법

  • μ§κ΄€μ μœΌλ‘œ μƒκ°ν•˜κΈ°

    • 전체 κ°€μŠ€ 양이 전체 λΉ„μš©λ³΄λ‹€ μž‘μœΌλ©΄ λΆˆκ°€λŠ₯
    • κ°€λŠ₯ν•œ λͺ¨λ“  μ‹œμž‘μ μ„ κ³ λ €ν•΄μ•Ό 함
  • κ΄€μ°°ν•  μ€‘μš”ν•œ νŒ¨ν„΄

    • λ§Œμ•½ iμ—μ„œ jκΉŒμ§€ κ°€λŠ” 것이 λΆˆκ°€λŠ₯ν•˜λ‹€λ©΄, i와 j μ‚¬μ΄μ˜ μ–΄λ–€ μ§€μ μ—μ„œ μ‹œμž‘ν•΄λ„ j에 도달할 수 μ—†μŒ
    • λ”°λΌμ„œ κ°€μŠ€κ°€ λΆ€μ‘±ν•΄μ§€λŠ” 지점 λ‹€μŒλΆ€ν„° μƒˆλ‘­κ²Œ μ‹œμž‘ν•˜λ©΄ 됨

Step 3: μ½”λ“œ 섀계

  1. 총 κ°€μŠ€λŸ‰κ³Ό 총 λΉ„μš©μ„ λΉ„κ΅ν•˜μ—¬ ν•΄κ²° κ°€λŠ₯μ„± 확인
  2. κ°€λŠ₯ν•œ μ‹œμž‘μ  μ°ΎκΈ°:
    • 각 μ§€μ μ—μ„œ 남은 κ°€μŠ€λŸ‰ 계산 (gas[i] - cost[i])
    • κ°€μŠ€κ°€ λΆ€μ‘±ν•΄μ§€λ©΄(음수) μ‹œμž‘μ μ„ λ‹€μŒ μ§€μ μœΌλ‘œ κ°±μ‹ 
    • λ§ˆμ§€λ§‰κΉŒμ§€ λŒμ•˜μ„ λ•Œ 남은 μ‹œμž‘μ μ΄ μ •λ‹΅

Step 4: μ½”λ“œ κ΅¬ν˜„

/**
 * @param {number[]} gas
 * @param {number[]} cost
 * @return {number}
 */
var canCompleteCircuit = function(gas, cost) {
    // 총 κ°€μŠ€λŸ‰κ³Ό 총 λΉ„μš© 계산
    let totalGas = 0;
    let totalCost = 0;
    for (let i = 0; i < gas.length; i++) {
        totalGas += gas[i];
        totalCost += cost[i];
    }
    
    // 총 κ°€μŠ€λŸ‰μ΄ 총 λΉ„μš©λ³΄λ‹€ μž‘μœΌλ©΄ λΆˆκ°€λŠ₯
    if (totalGas < totalCost) return -1;
    
    // κ°€λŠ₯ν•œ μ‹œμž‘μ  μ°ΎκΈ°
    let tank = 0;
    let start = 0;
    
    for (let i = 0; i < gas.length; i++) {
        tank += gas[i] - cost[i];
        
        // ν˜„μž¬ μ§€μ κΉŒμ§€ κ°€μŠ€κ°€ λΆ€μ‘±ν•˜λ©΄ λ‹€μŒ μ§€μ μ—μ„œ μ‹œμž‘
        if (tank < 0) {
            tank = 0;
            start = i + 1;
        }
    }
    
    return start;
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions