우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»‍πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀

Eager To Learn 🌌

πŸ‘¨πŸ»‍πŸ’» PS/LeetCode 150

[Java] 1. Two Sum

2023. 8. 30. 10:47

문제 νŒŒμ•…

μ •μˆ˜ λ°°μ—΄ nums κ°€ μ£Όμ–΄μ§„λ‹€.

 

λ°°μ—΄μ˜ 두 μ›μ†Œλ₯Ό λ”ν–ˆμ„ λ•Œ, target이 λ˜λŠ” κ°’μ˜ 인덱슀λ₯Ό λ°˜ν™˜ν•΄μ•Όν•œλ‹€.

 

닡은 μ •ν™•νžˆ 1개 μ‘΄μž¬ν•œλ‹€.

 


풀이

 

1️⃣ HashMap 을 μ΄μš©ν•œ 풀이

πŸ’‘ λ– μ˜€λ₯Έ Idea

각 값을 key 둜, 인덱슀 값을 value 둜 μ €μž₯ν•˜λŠ” map을 μ •μ˜ν•œλ‹€.

nums 배열을 μˆœνšŒν•˜λ©΄μ„œ target-nums[i] κ°€ map 에 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜κ³ , μ‘΄μž¬ν•œλ‹€λ©΄ λ‹΅μœΌλ‘œ λ°˜ν™˜ν•œλ‹€.

 

import java.util.*;
class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<nums.length;i++){
            int search = target-nums[i];
            if(map.containsKey(search)){
                return new int[]{i,map.get(search)};
            }
            map.put(nums[i],i);
        }
        return new int[]{};
    }
}

 

κ²°κ³Ό

 

 

2️⃣ 투 포인터 풀이

πŸ’‘ λ– μ˜€λ₯Έ Idea

https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/?envType=study-plan-v2&envId=top-interview-150

μ˜ˆμ „μ— 이 λ¬Έμ œμ™€ μœ μ‚¬ν•œ 문제λ₯Ό ν’€μ—ˆλ˜ κ²½ν—˜μ΄ μžˆμ—ˆλ‹€.

투 포인터 λ°©μ‹μœΌλ‘œ, λ”ν–ˆμ„ λ•Œ 합이 target 이 λ˜λŠ” μœ„μΉ˜λ₯Ό νƒμƒ‰ν•œλ‹€.

단, 이 λ¬Έμ œμ—μ„œ μš”κ΅¬ν•˜λŠ” μΈλ±μŠ€λŠ” μ •λ ¬ν•˜κΈ° μ „ μΈλ±μŠ€μ΄λ―€λ‘œ

μ •λ ¬ν•˜κΈ° μ „ 인덱슀λ₯Ό λ³΄κ΄€ν•˜κΈ° μœ„ν•΄ λ°°μ—΄λ‘œ κ°’κ³Ό 인덱슀λ₯Ό λ³΄κ΄€ν•˜μ—¬, μ •λ‹΅ 제좜 μ‹œ λ°˜ν™˜ν•˜μ˜€λ‹€.

 

class Solution {
  public int[] twoSum(int[] nums, int target) {
        int N = nums.length;
        int[][] nodes = new int[N][2];
        for (int i = 0; i < N; i++) {
            nodes[i] = new int[]{nums[i], i};
        }

        Arrays.sort(nodes, (a, b) -> a[0] - b[0]);

        int left = 0, right = nodes.length - 1;
        while (left < right) {
            int sum = nodes[left][0] + nodes[right][0];
            if (sum < target) {
                left++;
            } else if (sum > target) {
                right--;
            } else {
                break;
            }
        }

        return new int[]{nodes[left][1], nodes[right][1]};
    }
}

 

κ²°κ³Ό

이 λ¬Έμ œμ—μ„œ μš”κ΅¬ν–ˆλ˜ 것은, Hash 방식 μ΄μ—ˆκΈ° λ•Œλ¬Έμ— μ†λ„λŠ” 많이 λŠλ €μ‘Œλ‹€.

 

 


πŸ“– 회고

 

 

[Java] 167. Two Sum II - Input Array Is Sorted

문제 νŒŒμ•… λΉ„ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬λ˜μ–΄ μžˆλŠ” μ •μˆ˜ λ°°μ—΄ numbers κ°€ μ£Όμ–΄μ§„λ‹€. λ°°μ—΄μ—μ„œ target 값을 λ§Œλ“€ 수 μžˆλŠ” κ°’ 2개λ₯Ό μ°Ύμ•„, ν•΄λ‹Ή κ°’μ˜ 인덱슀λ₯Ό λ°˜ν™˜ν•΄μ•Όν•œλ‹€. ( index1 < index2 ) 풀이 1️⃣ 투 포인

yinq.tistory.com

 

이 문제λ₯Ό 이전에 ν’€μ—ˆμ—ˆλŠ”λ°, Hashλ₯Ό μ΄μš©ν•΄μ„œ ν’€ 생각은 λ‹Ήμ‹œμ— ν•˜μ§€ λͺ»ν–ˆμ—ˆλ‹€.

 

κ·Έλž˜μ„œ λ‹€μ‹œ 이번 λ¬Έμ œμ™€ 같은, Hash λ°©μ‹μœΌλ‘œ ν’€μ–΄λ³΄λ‹ˆ 톡과도 ν•˜μ˜€λ‹€.

 

λ‹Ήμ‹œμ—λŠ” λͺ°λžμ§€λ§Œ, μ΄μ œλΆ€ν„°λΌλ„ 이런 λ¬Έμ œμ—μ„œ μ—¬λŸ¬ 접근법이 μžˆλ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆμœΌλ‹ˆ 잘 κΈ°μ–΅ν•˜κ³  μžˆμ–΄μ•Όκ² λ‹€.

    'πŸ‘¨πŸ»‍πŸ’» PS/LeetCode 150' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [Java] 383. Ransom Note
    • [Java] 219. Contains Duplicate II
    • [Java] 150. Evaluate Reverse Polish Notation
    • [Java] 155. Min Stack
    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”