λ¬Έμ νμ
μ°κ²° 리μ€νΈμ ν€λκ° μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ μ΄ μ°κ²° 리μ€νΈκ° μ¬μ΄ν΄μ μ΄λ£¨λμ§ κ²°μ ν΄μΌνλ€.
νμ΄
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;
}
}
κ²°κ³Ό
π νκ³
μ΄λ² λ¬Έμ μμλ λ΄κ° μκ³ μλ λ°©μμΌλ‘λ ν΄κ²°ν μ μμμ§λ§, ν¨μ¨μ μΈ μλ‘μ΄ μκ³ λ¦¬μ¦ λ°©λ²μ μκ² λμλ€.
μ²μμλ μ΄λ° μμν μκ³ λ¦¬μ¦ κΈ°λ²μ΄ λΆλ΄μ€λ¬μ μλλ°, μμκ°λ μ¬λ―Έκ° μκΈ΄ κ² κ°κ³ μ΄λ¬ν κΈ°λ²μ λ§λ μ¬λλ€μ΄ μ°Έ λλ¨νλ€λ μκ°μ΄ λ€μλ€.
λ¨Έλ¦Ώμμ μ κΈ°μ΅ν΄λμ΄μΌκ² λ€.