diff --git a/linked-list-cycle/juhui-jeong.java b/linked-list-cycle/juhui-jeong.java new file mode 100644 index 0000000000..a890e044d2 --- /dev/null +++ b/linked-list-cycle/juhui-jeong.java @@ -0,0 +1,17 @@ +/* + * 시간 복잡도: O(n) + * 공간 복잡도: O(n) + */ +public class Solution { + public boolean hasCycle(ListNode head) { + Set visited = new HashSet<>(); + while (head != null) { + if (visited.contains(head)) { + return true; + } + visited.add(head); + head = head.next; + } + return false; + } +} diff --git a/reverse-bits/juhui-jeong.java b/reverse-bits/juhui-jeong.java index 3a8dd1cae8..09e0ed9d6b 100644 --- a/reverse-bits/juhui-jeong.java +++ b/reverse-bits/juhui-jeong.java @@ -3,6 +3,25 @@ * 공간 복잡도: O(1) */ class Solution { + public int reverseBits(int n) { + int result = 0; + + for (int i = 0; i < 32; i++) { + result = (result << 1) | (n & 1); + n >>= 1; + } + return result; + } +} + +/* + * 시간 복잡도: O(1) + * 공간 복잡도: O(32) + * + * 해당 코드로도 동작하지만 문자열 변환 -> 뒤집기 -> 다시 문자열 파싱의 과정을 거치지 않고 + * 비트를 조작하는 것이 문제의 의도에 더 부합함. + * +class Solution { public static String toBinaryString(int value) { String str = Integer.toBinaryString(value); @@ -20,3 +39,4 @@ public int reverseBits(int n) { return result; } } + */