프로그래밍-코딩테스트/LeetCode(84)
-
[DP] Counting Bits
0부터 input으로 들어오는 숫자까지의 자연수에 대해 각각을 이진수로 변경 후, 해당 결과의 1의 갯수를 세서 배열로 리턴하는 문제. 그냥 Loop를 돌면서 모두 2진수로 변환시킨후, 정규표현식을 이용해 1의 갯수를 찾아내 리턴하였다. 정규표현식을 쓰는 정도만 번거로울뿐 복잡하진 않았던 문제들.
2021.03.26 -
[Array] Partition Labels
특정 string이 input으로 들어왔을 때, 최대한 하나의 part로 보이게끔 string을 나누면 몇개가 되느냐를 묻는 문제이다. 다시말해, 각 part에 포함된 각각의 string이 겹치지 않도록 part를 나누는 방법을 구하라는 뜻. 이때 리턴값은 각 part의 갯수로 구성된 배열이 된다. 이렇게 part에 대한 maximum을 찾는 문제는 greedy algorithm의 활용으로 귀결된다. greedy algorithm은 원소들을 순회하되, 각 순회 시점에서 global solution만을 고려하며 매 순회마다 비교하는 방식이다 따라서 한번의 순회로 도출된 global solution이 모든 경우에 대한 global solution인 경우에 적용될 수 있다. 위와 같은 문제도 이러한 유형에 해..
2021.03.26 -
[정리] Top 100 Liked Questions - Easy (1)
1. Merge Two Binary Trees - problem : 두 개의 Tree가 들어올 때 merge하기 - input : 각 Tree의 root-node - strategy : Tree 문제 -> recursion을 생각하자 : mergeTrees라는 주어진 작성 함수가 재귀의 대상이다 : Tree를 리턴할때는 root node를 리턴한다 : Tree의 Node는 value가 반드시 존재하고, left와 right를 정의해주어야 한다. : sum node values up as the new value -> 새로 만드는 node의 value는 두개의 input node value의 합 : the NOT null node will be used as the node of the new tree->..
2021.03.10 -
[Tree] Symmetric Tree
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For example, this binary tree [1,2,2,3,4,4,3] is symmetric: 트리가 symmetric한지 여부를 살피는 문제 트리는 항상 재귀를 사용한다는 점을 기억하자
2021.02.09 -
[Stack] Min Stack
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. push(x) -- Push element x onto stack. pop() -- Removes the element on top of the stack. top() -- Get the top element. getMin() -- Retrieve the minimum element in the stack. stack을 구현하는 전형적인 문제다 자바스크립트로 구현하는 prototype 메소드는 this를 이용한다.
2021.02.09 -
[Linked List] Intersection of Two Linked Lists
Write a program to find the node at which the intersection of two singly linked lists begins. For example, the following two linked lists: 연결된 두개의 Linked List에서 Intersection 노드를 찾는 문제이다 이러한 경우 two pointer를 응용하면 된다 예를들어 input : listA = [0,9,1,2,4], listB = [3,2,4]라면 listA: 0 -> 9 -> 1 listB: 3 -> 2 -> 4 순서로 순회할것이다 여기부터 listB.next는 none이 된다. 이 경우 다시 얘를 listA의 첫번째 head node로 이어주자 listA: 0 -> 9 -> 1..
2021.02.09