코딩테스트 8

Graphs

1971. Find if Path Exists in Graphn개의 정점이 있는 양방향 그래프가 있는데, 각 정점에는 0부터 n-1까지(포함)의 레이블이 지정되어 있습니다. 그래프의 모서리는 2차원 정수 배열 edges로 표현되며, 각 edges[i] = [ui, vi]는 정점 ui와 정점 vi ​​사이의 양방향 모서리를 나타냅니다. 각 정점 쌍은 최대 하나의 모서리로 연결되며, 어떤 정점도 자기 자신에게 모서리를 갖지 않습니다. 정점 소스에서 정점 목적지까지 유효한 경로가 있는지 확인하고 싶습니다. 주어진 모서리와 정수 n, 소스, 목적지에 대해 소스에서 목적지까지 유효한 경로가 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 제약사항1 0 edges[i].length == 20 u..

코딩테스트 2025.06.11

Binary Trees

111. Minimum Depth of Binary Tree이진 트리가 주어졌을 때, 최소 깊이를 구하세요. 최소 깊이는 루트 노드에서 가장 가까운 리프 노드까지 최단 경로를 따라 있는 노드의 개수입니다.참고: 리프 노드는 자식 노드가 없는 노드입니다. 제약사항node의 개수는 [0, 10^5]-1000 아이디어dfs로 트리를 순회하여 왼쪽 트리의 최솟값과 오른쪽 트리의 최솟값을 비교해서 최솟값 + 1/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { t..

코딩테스트 2025.05.21

힙 (Heap)

1962. Remove Stones to Minimize the Total0부터 시작하는 인덱스 정수 배열 piles와 정수 k가 주어집니다. 여기서 piles[i]는 i번째 더미의 돌 개수를 나타내고, 다음 연산을 정확히 k번 적용해야 합니다.piles[i]를 하나 선택하고 floor(piles[i] / 2)개의 돌을 제거합니다.같은 더미에 이 연산을 두 번 이상 적용할 수 있습니다.k번 연산을 적용한 후 남은 돌의 최소 개수를 반환합니다.floor(x)는 x보다 작거나 같은 가장 큰 정수입니다(즉, x를 내림합니다). 제약사항1 1 1 아이디어최소 개수를 반환하려면 최대한 많이 제거해야 한다. 최대인 더미를 계속 접근해야하므로 힙 자료구조 사용.class Solution { public int ..

코딩테스트 2025.05.20

해시 추가문제

217. Contains Duplicate정수 배열 nums가 주어졌을 때, 배열에 값이 두 번 이상 나타나면 true를 반환하고, 모든 요소가 다르면 false를 반환합니다. 제약사항1 -10^9 class Solution { public boolean containsDuplicate(int[] nums) { Set appear = new HashSet(); for(int num : nums){ if (!appear.add(num)) return true; } return false; }} 1436. Destination City배열 paths가 주어집니다. 여기서 paths[i] = [city..

코딩테스트 2025.05.05

해시 (Hash)

문제링크: https://leetcode.com/problems/check-if-the-sentence-is-pangram/description/1832. Check if the Sentence Is PangramPangram이란 영어 알파벳의 모든 문자가 적어도 한번 나타나는 문장이다.모두 영어 소문자인 문자열 sentence가 주어질 때, sentence가 pangram이면 true, 아니면 false를 리턴해라.Ex)Input: sentence = "thequickbrownfoxjumpsoverthelazydog"Output: trueExplanation: sentence contains at least one of every letter of the English alphabet. 제약사항1 se..

코딩테스트 2025.04.15

Two pointer

문제링크: https://leetcode.com/problems/reverse-words-in-a-string-iii/description/557. Reverse Words in a String III문자열 s가 주어진다. 공백을 기준으로 단어들을 reverse해서 return해라Ex)Input: s = "Let's take LeetCode contest"Output: "s'teL ekat edoCteeL tsetnoc" 제약사항s.length는 1이상 5*10^4 이하이다.s는 프린트 가능한 ASCII 문자를 포함. s는 앞 뒤에 공백이 없다. 적어도 하나의 단어가 존재. 단어는 공백 하나로 구분된다. 아이디어:s의 길이 때문에 O(n^2) 불가문자열이고 O(n^2)이 안되면 투포인터가 생각난다. su..

코딩테스트 2025.04.05

Prefix sum

문제링크: https://leetcode.com/problems/running-sum-of-1d-array/description/ 주어진 정수 배열 nums에 대해,각 인덱스 i에서의 누적합(running sum)을 계산하라.즉, runningSum[i] = nums[0] + nums[1] + ... + nums[i]→ 이를 모든 인덱스에 대해 구한 배열을 반환하는 문제. 제약사항1 -10^6 누적합의 범위: -10^9 ~ 10^9 => int로 커버 가능class Solution { public int[] runningSum(int[] nums) { int[] answer = new int[nums.length]; answer[0] = nums[0]; for(..

코딩테스트 2025.04.02

Sliding Window

문제링크: https://leetcode.com/problems/maximum-average-subarray-i/ 정수 배열 nums와 정수 k가 주어질 때,길이가 정확히 k인 연속된 서브어레이 중 평균이 가장 큰 값을 반환하라.정답은 오차가 10^-5 이하라면 인정된다. nums.length가 최대 100,000이므로 O(n^2) 미만으로 풀어야 합니다. 제약 지표: k개의 원소로 구성된 서브어레이의 합제약 조건:서브어레이의 길이 == kclass Solution { public double findMaxAverage(int[] nums, int k) { double sum = 0.; double answer = 0; for(int i = 0; i    문제링..

코딩테스트 2025.04.01