์ฝ”ํ…Œ

LeetCode Top Interview 150 - 167. Two Sum II - Input Array Is Sorted

seo dori 2023. 8. 25. 23:12

๐Ÿค” ๋ฌธ์ œ ์ดํ•ด

๋น„์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ๋‘๊ฐœ์˜ value์„ ๋”ํ•ด target๊ฐ’์ด ๋งž๋Š” index๊ฐ’ ๋‘๊ฐœ ๋‚˜์˜ค๊ธฐ

 

 

๐Ÿค” EX

Example 1:

Input: numbers = [2,7,11,15], target = 9
Output: [1,2]
Explanation: The sum of 2 and 7 is 9. Therefore, index1 = 1, index2 = 2. We return [1, 2].
Example 2:

Input: numbers = [2,3,4], target = 6
Output: [1,3]
Explanation: The sum of 2 and 4 is 6. Therefore index1 = 1, index2 = 3. We return [1, 3].
Example 3:

Input: numbers = [-1,0], target = -1
Output: [1,2]
Explanation: The sum of -1 and 0 is -1. Therefore index1 = 1, index2 = 2. We return [1, 2].

 

๐Ÿค” ์˜์‚ฌ ์ฝ”๋“œ / ์‹œ๊ฐ„๋ณต์žก๋„์— ๊ฑธ๋ฆฐ์ฝ”๋“œ

for๋ฌธ์•ˆ์—์„œ index =0๋ถ€ํ„ฐ value๋ฅผ ๊ฐ€์ง€๊ณ  ๊ณ„์‚ฐํ›„ indexOf๋กœ ๋‚˜๋จธ์ง€ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค 
๋งŒ์•ฝ -1์ด๋ผ๋ฉด ๋‹ค์Œ ์žˆ๋‹ค๋ฉด return์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ’ ๋„์ถœ
์˜ˆ์™ธ์ƒํ™ฉ๋ฐœ์ƒ ex[0,0,3,4] target = 0 ์ผ๋•Œ index=1๋‹ค์Œ๋ถ€ํ„ฐ ์ฐพ์•„์•ผํ•˜๋Š”๋ฐ 1๋กœ ์ฐพ์Œ ๊ทธ๋ž˜์„œ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ 
O(n^2)๋ผ ๋˜ ์•ˆ๋ฐ›์•„์คŒ....

var twoSum = function(numbers, target) {
    numbers.sort((a,b)=>{a-b})

    for(let i=0;i<numbers.length;i++){
        if(numbers.indexOf(target - numbers[i],i+1)>0){
            return [i+1,numbers.indexOf(target - numbers[i],i+1)+1]
        }
    }
};

 

 

๐Ÿค” ํ•ด๊ฒฐํ•œ ์ฝ”๋“œ

์‹œ๊ฐ„ ๋ณต์žก๋„ ๋•Œ๋ฌธ์— ๋˜ ์‹คํŒจํ•œ๊ฒƒ์„ ๋ณด๊ณ (์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์ž)

two pointer์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ƒ๊ฐ๋‚ฌ๋‹ค ํ•œ ๋ฐฐ์—ด์—์„œ ๋‘๊ฐœ์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ๋”ํ•˜๋Š” ๋ฌธ์ œ์ด๊ธฐ๋•Œ๋ฌธ์— ์ ์šฉํ• ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™์•˜๋‹ค.

var twoSum = function(numbers, target) {
    numbers.sort((a,b)=>{a-b})
    let left =0
    let right = numbers.length-1

    while(left<right){
        let result = numbers[left] + numbers[right]

        if(result ==target){
            return [left+1,right+1]
        }else if(result>target){
            right --
        }else{
            left ++
        }
    }
};

 

๐Ÿค” ๋‹ค๋ฅธ ํ’€์ด๋ฐฉ๋ฒ•

์‚ฌ์‹ค two pointer์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ’€์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ๊ฐ™์€ ํ’€์ด ๋ฐฉ๋ฒ•์ด ๋งŽ์•˜์ง€๋งŒ 

์• ์ดˆ์— while๋ฌธ์—์„œ ์กฐ๊ฑด์„ ์ฃผ๋Š” ๊ฒƒ๋„ ์ข‹์€ ์ƒ๊ฐ ๊ฐ™์•˜๊ตฌ

    while (numbers[p1] + numbers[p2] !== target)

 

 

์™œ ๋‚œ for๋ฌธ์„ ์ฒ˜์Œ์— ์ด์šฉํ•˜๋ฉด์„œ ๋‘๊ฐœ๋ฅผ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์žŠ๊ณ ์žˆ์—ˆ์ง€... ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค

function twoSum(numbers, target) {
    for(let start = 0, end = numbers.length-1; start < end;){
        let sum = numbers[start] + numbers[end]
        if(sum === target)return [++start, ++end]
        else sum > target ? end-- : start++
    }
};

์ถœ์ฒ˜ : https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/discuss/520736/Concise-JavaScript-O(1)-Space-Solution