우규이인우윀
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] 141. Linked List Cycle

2023. 8. 28. 09:44

문제 νŒŒμ•…

μ—°κ²° 리슀트의 ν—€λ“œκ°€ μ£Όμ–΄μ§„λ‹€. 그리고 이 μ—°κ²° λ¦¬μŠ€νŠΈκ°€ 사이클을 μ΄λ£¨λŠ”μ§€ κ²°μ •ν•΄μ•Όν•œλ‹€.

 


풀이

 

1️⃣ Set 자료ꡬ쑰λ₯Ό μ΄μš©ν•œ 풀이

 

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

λ…Έλ“œλ₯Ό set μžλ£Œκ΅¬μ‘°μ— μž…λ ₯ν•˜κ³ , λ‹€μŒ λ…Έλ“œλ‘œ μ§„ν–‰ν•˜κΈ° 전에

μ§„ν–‰ν•  λ…Έλ“œκ°€ set에 μž…λ ₯λ˜μ–΄μžˆλŠ”μ§€ ν™•μΈν•œλ‹€.

μ§„ν–‰ν•  λ…Έλ“œκ°€ set에 μž…λ ₯λ˜μ–΄μžˆμ—ˆλ‹€λ©΄, μ‚¬μ΄ν΄μž„μ„ μ•Œ 수 μžˆλ‹€.

 

μœ„ 아이디어λ₯Ό λ°”νƒ•μœΌλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ˜€λ‹€.

 

public class Solution {
    public boolean hasCycle(ListNode head) {
        Set<ListNode> set = new HashSet<>();
        ListNode now = head;
        set.add(now);

        while (now != null) {
            ListNode nextNode = now.next;

            if (set.contains(nextNode)) {
                return true;
            }

            set.add(nextNode);
            now = nextNode;
        }

        return false;
    }
}

 

κ²°κ³Ό

κ²°κ³Όλ₯Ό ν™•μΈν•΄λ³΄λ‹ˆ, 속도 κ°œμ„ μ΄ ν•„μš”ν•΄λ³΄μ˜€λ‹€.

 

λ˜ν•œ, 곡간 λ³΅μž‘λ„ O(1) 풀이 방법이 μ‘΄μž¬ν•œλ‹€κ³  ν•˜μ—¬ κ³ λ―Όν•΄λ³΄μ•˜λ‹€.

 

2️⃣ ν”Œλ‘œμ΄λ“œ μˆœν™˜ μ°ΎκΈ° μ•Œκ³ λ¦¬μ¦˜

 

처음 μ•Œκ²Œλœ μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.

 

속도가 λ‹€λ₯Έ λ‘κ°œμ˜ 포인터λ₯Ό 루프에 μ§„μž…μ‹œμΌ°μ„ λ•Œ, 사이클이라면 λ™μΌν•œ λ…Έλ“œλ₯Ό κ°€λ¦¬ν‚€λŠ” μ‹œμ μ΄ μƒκΈ΄λ‹€λŠ” 아이디어λ₯Ό μ΄μš©ν•œ μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.

 

ν¬μΈν„°μ˜ 속도가 1인 거뢁이와 속도가 2인 토끼가 루프λ₯Ό μˆœνšŒν•˜λ‹€λ³΄λ©΄ 같은 값을 κ°€λ¦¬ν‚€λŠ” 지점이 λ°˜λ“œμ‹œ μƒκΈ°λŠ” 것을 예둜 λ“€ 수 μžˆλ‹€.

 

public class Solution {
    public boolean hasCycle(ListNode head) {
        if (head == null || head.next == null) {
            return false;
        }

        ListNode pointer1 = head;
        ListNode pointer2 = head;

        while (pointer2.next != null && pointer2.next.next != null) {
            pointer1 = pointer1.next;
            pointer2 = pointer2.next.next;

            if (pointer1 == pointer2) {
                return true;
            }

        }
        return false;
    }
}

 

κ²°κ³Ό


πŸ“– 회고

이번 λ¬Έμ œμ—μ„œλ„ λ‚΄κ°€ μ•Œκ³ μžˆλŠ” λ°©μ‹μœΌλ‘œλ„ ν•΄κ²°ν•  수 μžˆμ—ˆμ§€λ§Œ, 효율적인 μƒˆλ‘œμš΄ μ•Œκ³ λ¦¬μ¦˜ 방법을 μ•Œκ²Œ λ˜μ—ˆλ‹€.

 

μ²˜μŒμ—λŠ” 이런 μƒμ†Œν•œ μ•Œκ³ λ¦¬μ¦˜ 기법이 λΆ€λ‹΄μŠ€λŸ¬μ› μ—ˆλŠ”λ°, μ•Œμ•„κ°€λŠ” μž¬λ―Έκ°€ 생긴 것 κ°™κ³  μ΄λŸ¬ν•œ 기법을 λ§Œλ“  μ‚¬λžŒλ“€μ΄ μ°Έ λŒ€λ‹¨ν•˜λ‹€λŠ” 생각이 λ“€μ—ˆλ‹€.

 

머릿속에 잘 기얡해두어야겠닀. 

    'πŸ‘¨πŸ»‍πŸ’» PS/LeetCode 150' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [Java] 21. Merge Two Sorted Lists
    • [Java] 2. Add Two Numbers
    • [Java] 3. Longest Substring Without Repeating Characters
    • [Java] 209. Minimum Size Subarray Sum
    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

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