Algorithms (44) 썸네일형 리스트형 [LeetCode] 190. Reverse Bits 문제 풀이 (Java) ✔️ 오늘의 리트코드 공부 기록 – Reverse Bits문제 요약 (Reverse Bits)32비트 정수 n이 주어졌을 때,비트(bit) 순서를 거꾸로 뒤집은 값을 반환하라.(0번째 비트 ↔ 31번째 비트)문제 링크: Reverse Bits🤔 처음 떠올린 아이디어처음에는 단순하게 생각했다.“이진수로 바꾼 다음에 뒤집고, 다시 숫자로 만들면 되지 않을까?”그래서 자연스럽게Stack에 비트를 넣고(pop해서) 뒤집는 방식이 떠올랐다.💡 핵심 깨달음: 숫자 뒤집기가 아니라 “32칸 고정 비트” 뒤집기다여기서 중요한 함정이 있다.예를 들어 n = 2라면 이진수는 10이지만,이 문제는 32비트 전체를 본다.즉 실제 형태는:00000000000000000000000000000010이걸 뒤집으면:01000000.. [LeetCode] 153. Find Minimum in Rotated Sorted Array 풀이 (Java) ✔️ 오늘의 리트코드 공부 기록 – Find Minimum in Rotated Sorted Array문제 요약 (Find Minimum in Rotated Sorted Array)오름차순 정렬된 배열이 한 번 회전되었다.이 배열에서 최소값을 O(logN) 시간에 구하라.문제링크:https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/🤔 처음 떠올린 아이디어처음에는 이렇게 생각했다.그냥 전체를 한 번 순회하면서 최소값 찾으면 되지 않을까?하지만 문제 조건은 O(logN).즉, 이건 선형 탐색이 아니라👉 Binary Search 문제라는 뜻이다.그럼 이런 질문이 생긴다.“회전됐는데 이진 탐색이 가능해?”💡 핵심 깨달음: 회전 배열은 두 개.. [LeetCode] 133. Clone Graph 풀이 (Java) ✔️ 오늘의 리트코드 공부 기록 – Clone Graph (핵심은 “값 복사”가 아니라 “연결 구조 복사”였다) 문제 요약 (Clone Graph)연결된 무방향 그래프의 시작 노드가 주어질 때, 그래프 전체를 깊은 복사(Deep Copy) 해서 새로운 그래프의 시작 노드를 반환하는 문제 문제링크: https://leetcode.com/problems/clone-graph 그래프는 트리처럼 깔끔하지 않다.사이클(cycle) 이 있을 수 있고같은 노드가 여러 경로로 다시 등장한다즉, 아무 생각 없이 DFS로 복사하면사이클 때문에 무한 재귀같은 노드를 여러 번 복사해서 구조가 깨짐😮 여기서 관점을 바꿔야 한다.이 문제는 “노드 값을 복사하는 문제”가 아니라👉 “노드 사이의 연결 관계(참조 구조) 를 그대로.. [LeetCode] 152. Maximum Product Subarray 풀이 (Java) ✔️ 오늘의 리트코드 공부 기록 – Maximum Product Subarray문제 요약 (Maximum Product Subarray)정수 배열이 주어질 때, 연속된 부분 배열(subarray) 중에서 곱이 가장 큰 값을 구하라.문제링크: https://leetcode.com/problems/maximum-product-subarray🤔 처음 떠올린 아이디어처음에는 이렇게 생각했다.그냥 계속 곱해가면서 최대값을 갱신하면 되지 않을까?Kadane처럼 현재까지의 곱을 유지하면서최대값을 업데이트하면 될 것 같았다.하지만 바로 이런 예시에서 깨졌다.[2, 3, -2, 4]2 × 3 = 66 × -2 = -12여기서 갑자기 음수 때문에 값이 망가진다.그리고 더 치명적인 예시가 있다.[-2, 3, -4]-2 ×.. [LeetCode] Linked List 패턴 7개 치트시트 왜 Linked List 패턴 정리가 중요한가?Linked List 문제를 많이 풀다 보면문제는 달라 보여도 사고 흐름은 항상 비슷하다는 걸 느끼게 된다.“포인터 이동 패턴을 이해하고 있는가?”그래서 Linked List 문제를 패턴 단위로 묶어서 정리하기 시작했다.🧠 Pattern 1. Slow / Fast Pointer (중간 찾기, 사이클)언제 떠올릴까?“중간”/“절반”“사이클이 있는지”“한 번에 해결”대표 문제Middle of the Linked ListLinked List CycleReorder ListPalindrome Linked List 핵심 아이디어slow: 1칸fast: 2칸→ fast가 끝나면 slow는 중간while (fast != null && fast.next != null) .. [LeetCode] 143. Reorder List 풀이 (Java) ✔️ 오늘의 리트코드 공부 기록 – Reorder List문제 요약 (Reorder List)단일 연결 리스트가 주어졌을 때,L0 → L1 → L2 → … → Ln을L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …형태로 재배치하라.값을 바꾸는 것이 아니라 노드 자체의 연결을 변경해야 한다.문제링크: https://leetcode.com/problems/reorder-list🤔 처음 떠올린 아이디어문제를 보자마자 이런 생각이 들었다.앞에서 하나, 뒤에서 하나씩 꺼내면 되지 않나? 예시:1 → 2 → 3 → 4 → 5→ 1, 5, 2, 4, 3 문제는 여기서 시작된다.단일 연결 리스트는 뒤에서 접근할 수 없다.배열이라면 left, right 포인터로 쉽게 해결되는데, 리스트는 뒤로 못 간다... [LeetCode] 141. Linked List Cycle 풀이 (Java) ✔️ 오늘의 리트코드 공부 기록 – Linked List Cycle문제 요약 (Linked List Cycle)단일 연결 리스트가 주어졌을 때, 해당 리스트에 사이클이 존재하는지 판별하라.추가 공간 O(1), 리스트 수정 불가 문제 링크: https://leetcode.com/problems/linked-list-cycle/🤔 처음 떠올린 아이디어처음 문제를 봤을 때 이런 생각이 들었다.같은 노드를 두 번 방문하면 사이클 아닌가?그러면 자연스럽게 이런 방법이 떠오른다.Set visited = new HashSet();방문할 때마다 set에 저장하고,이미 방문한 노드라면 → 사이클.하지만 문제 조건에 O(1) 공간이 붙는다.👉 HashSet은 O(n) 👉 사용 불가그럼 이런 질문이 생긴다.저장하지 않.. [LeetCode] 139. Word Break 풀이 (Java) ✔️ 오늘의 리트코드 공부 기록 – Word Break문제 요약 (Word Break)문자열 s와 단어 사전 wordDict가 주어졌을 때, s를 사전의 단어들로 나눌 수 있는지 판별하는 문제.문제 링크: https://leetcode.com/problems/word-break🤔 처음 떠올린 아이디어처음에는 단순하게 "백트래킹"을 생각했지만, 이느 중복으로 많은 부분 문자열을 검사하게 되어 비효율적이다.그래서 자연스럽게 이렇게 질문했다.“부분 문자열을 이미 검사한 결과를 저장하면 반복 계산을 줄일 수 있지 않을까?”즉, 당연하게 DP 를 이용해야겠다고 떠올렸다.💡 방법1: 재귀 + 메모이제이션 (Top-Down)그럼 이제 DP 배열이 가지는 의미를 명확히 정의해야 한다.재귀의 경우 인덱스의 뒤에서.. 이전 1 2 3 4 ··· 6 다음