본문 바로가기

전체 글

(2341)
(Python3) - LeetCode (Medium) : 494. Target Sum https://leetcode.com/problems/target-summemoization을 활용한 dfs문제였습니다.📕 풀이방법📔 입력 및 초기화1. 변수 depth선언 후 nums의 길이를 저장합니다. 2.(각 depth별 만들어진 숫자를 key로), 만드는 경우의 수를 value로 hash map인 memo를 선언 후 빈 객체로 초기화합니다.📔 풀이과정문제는 중복 상태를 메모이제이션으로 방지하며 재귀 호출을 최적화하는 방식으로 해결할 수 있습니다. nums 배열의 길이가 최대 20이며 각 원소는 1000 이하, 합계는 -20,000 ~ 20,000 범위를 가지므로 ${( n \cdot S = 20 \cdot 40,001 \approx 800,000 )}$번의 계산으로 해결 가능합니다.풀이 과..
(Python3) - LeetCode (Medium) : 515. Find Largest Value in Each Tree Row https://leetcode.com/problems/find-largest-value-in-each-tree-rowlevel별 탐색하는 BFS 문제였습니다.📕 풀이방법📔 입력 및 초기화1. 탐색을 진해할 deque변수 dq를 선언 후 root를 넣어줍니다.  2. level별 최댓값을 반환할 max_values를 선언 후 빈 배열로 초기화해줍니다.📔 풀이과정dq에 원소가 존재하는 동안 while loop를 수행하며 다음을 진행합니다.1. 현 dq의 size를 구해줍니다. 이는 즉 자식의 node 개수를 의미합니다. 2. 각 자식들이 가지는 원소들을 비교해 최댓값을 저장할 변수 max_value를 선언해줍니다. 3. size만큼 for loop를 수행하며 자식 노드들의 원소를 비교하며 dq에서 po..
(Python3) - LeetCode (Hard) : 3203. Find Minimum Diameter After Merging Two Trees https://leetcode.com/problems/find-minimum-diameter-after-merging-two-trees트리의 지름을 구하는 문제였습니다.📕 풀이방법📔 입력 및 초기화인접리스트 graph1, graph2를 구해줍니다.📔 풀이과정* 트리의 지름은 bfs를 두 번 수행해 구할 수 있습니다.* n개의 노드에 대해 n-1개의 간선이 보장되므로 노드번호 띄엄띄엄 포함된 간선이 입력으로 들어오는 경우가 없습니다.1. 첫 번째 bfs로 끝 노드를 구한 뒤 해당 노드를 시작점으로 두 번째 bfs를 수행한다면 트리의 지름이 나옵니다. 2. 해당 부분을 bfs_diameter라는 함수를 선언해 bfs를 두 번 수행한 결과로 구한 지름 diameter를 구하고 반환합니다. 3. 트리를 ..
(Python3) - LeetCode (Medium) : 2471. Minimum Number of Operations to Sort a Binary Tree by Level https://leetcode.com/problems/minimum-number-of-operations-to-sort-a-binary-tree-by-levelO(n)으로 사이클을 통한 최소 swap 개수를 구하는 BFS 문제였습니다.📕 풀이방법📔 입력 및 초기화정답 변수 totalSwap과 bfs를 위한 deque dq를 선언 후 적절히 초기화해줍니다.📔 풀이과정1. 트리의 레벨별 bfs를 순회하도록 구현해줍니다. 현재 dq의 길이를 size로 두고 size만큼 dq의 원소를 popleft하며 순회하면 구할 수 있습니다. 이를 values배열에 append해줍니다.  2. 레벨별 values를 인자로 받아 최소 사이클의 개수를 반환하는 함수 minCicle을 구현해줍니다. 해당 함수는 다음과 같이..
(Python3) - LeetCode (Easy) : 1974.minimum-time-to-type-word-using-special-typewriter https://leetcode.com/problems/minimum-time-to-type-word-using-special-typewriter/시계, 반시계 방향을 생각해 해결한 문제였습니다.📕 풀이방법📔 입력 및 초기화현재 포인터 piv와 움직임 move를 선언 후 각각 'a', 0으로 초기화합니다.📔 풀이과정word의 원소를 순회하며 다음을 진행합니다.1. 시계방향은 현재 문자를 아스키 코드로 변환한 값에서 piv를 아스키 코드로 변환한 값의 차이입니다. 만약 이 차이가 음수라면 같은 방향으로 진행해야하므로 26을 더해줍니다. 2. 반시계 방향은 반대로 piv - 현재 문자가 됩니다. 만약 이 차이가 음수라면 마찬가지로 26을 더해줍니다. 3. 시계, 반시계방향의 움직임의 최솟값을 move에..
(Python3) - LeetCode (Medium) : 2415. Reverse Odd Levels of Binary Tree https://leetcode.com/problems/reverse-odd-levels-of-binary-treelevel별 순회하는 bfs 문제였습니다.📕 풀이방법📔 입력 및 초기화1. deque선언 후 root를 넣어줍니다. 2. level 선언 후 0으로 초기화합니다.📔 풀이과정dq에 원소가 있는 동안 while loop로 다음을 진행합니다.1. 현재 레벨에서 순회가능한 node 수는 dq의 크기입니다. 따라서 dq의 크기만큼 for loop를 수행하며 넣을 수 있는 다음 왼쪽, 오른쪽 서브 트리의 노드들을 넣어줍니다. 2. 완전 이진 트리이므로 왼쪽과 오른쪽 서브 트리에는 말단을 제외하고 항상 원소가 존재합니다. 서브트리가 존재하면 dq에 원소들을 넣어주고, 다음 레벨이 홀수라면 원소들을 뒤..
(Python3) - LeetCode (Medium) : 2. Add Two Numbers https://leetcode.com/problems/add-two-numbers/description/재귀를 활용해 linked list 순회 및 자료구조를 만들어본 문제였습니다.📕 풀이방법📔 입력 및 초기화 📔 풀이과정1. l1, l2를 순회하며 실제 숫자를 추출하는 함수 num_of_linked_list를 구현해줍니다. next가 None이 아닌 동안 loop를 수행하면서 현재 값에 10의 piv승만큼 곱한 값을 num에 더해주는 방식입니다. 해당 결과를 num에 저장합니다. 2. 주어진 num을 입력받아 reverse로 num의 일의 자리 수로 linked list를 재귀형태로 연결하여 만들어진 linked list를 반환하는 make_linked_list를 구현해줍니다. 해당 결과를 a..
(Python3) - LeetCode (Easy) : 1475. Final Prices With a Special Discount in a Shop https://leetcode.com/problems/final-prices-with-a-special-discount-in-a-shop간단 전수조사 문제였습니다.📕 풀이방법📔 풀이과정prices에 대해 2차원 for loop를 돌며 다음을 진행합니다. 현 i번째 다음부터 prices[i]가격보다 작은 prices[j]를 찾아 prices[i]에서 해당 값을 빼줍니다.📔 정답 출력 | 반환할인된 prices를 반환합니다.📕 Code📔 Python3class Solution: def finalPrices(self, prices: List[int]) -> List[int]: for i in range(len(prices)): for j in range(i+1..