프로그래밍-코딩테스트(84)
-
[DP] Minimum Path Sum
2차원 배열이 주어졌을때, 왼쪽위에서 오른쪽아래까지 가는 최소경로에 해당하는 vaule들을 모두 합하여 리턴하는 문제 역시 전형적인 점화식문제다 각 element를 기준으로 최소합을 구한다. 이 방식이 근본적인 Dynamic Programming 기법이다. 이때 i가0, j가 0인 경우는 각각 i-1, j-1이 없으므로 바로 이전 값을 더한것이 최소값이 된다.
2021.03.29 -
[Tree] Binary Tree Right Side View
right 노드들만 배열로 만들어 리턴하라는 문제다 BST에서 right노드는 부모노드보다 큰 value를 가진 애들일테다 처음엔 이렇게 간단한 로직만 생각했었는데, level을 고려하지 못했다는 사실을 깨달았다 이전 level에 따른 traverse와 동일하게 args를 설정하면 된다 새로운 level에 도달하면 일단 node의 value를 넣어주되, right node가 있는 경우에는 right node의 value를 push 없다면 left node를 push하는 것으로 설정한다 이러한 조건은 level과 length가 같은지를 체크함으로 설정한다 right node의 value가 이미 들어왔다면 해당 조건을 만족하지 못하므로 별도의 node입력 없이 끝날것이기 때문
2021.03.29 -
[Tree] Binary Tree Level Order Traversal
트리를 traverse해서 level(delpth)가 같은 노드끼리 묶어 리턴하라 트리 traverse이니 역시나 재귀를 활용할텐데, 여기엔 'result 배열의 length는 depth와 같아야 한다.'는 조건이 있다 따라서 함수는 result의 length와 depth가 다르다면 빈 배열 원소를 만들어주고, 해당하는 노드의 value를 push하도록 설계해야 한다. 이렇게 말이다. 단, 모든 경우는 root가 있는 경우다. 또한 재귀의 경우는 다음 node로 넘어갈때 재귀를 돌리는 것이므로 level에 1을 더해준다.
2021.03.29 -
[Array] Find the Duplicate Number
두번 나온 element 리턴하기 set을 이용하여 처음 나온 element는 add로 set에 넣고, 두번째 나온건 해당 element를 리턴하면 됨 왜 medium일까 궁금한 문제.. 나중에 바이너리 서치나 투포인터로도 풀어보자
2021.03.29 -
[Array] Kth Largest Element in an Array
그냥 내림차순으로 정렬해서 k-1번째 원소 리턴하면 됨... 이거 왜 mideum이지?
2021.03.29 -
[Array] Combination Sum
candidates 배열과 target 숫자가 주어질 때, candidtates 배열의 부분집합 원소합이 target이 되는 부분집합들을 배열로 다시 만들어 리턴하는 문제이다. 단, candidates의 원소는 중복해서 여러번 사용할 수 있다. 구체적으로 설명하기 위해 콘솔을 찍었다. subset, sum, index를 args로 가진 search 라는 함수를 재귀로 사용한다. 이때 subset은 true라면 리턴배열에 넣을 부분합, sum은 target과 같은 값을 가지는지 여부 확인을 위한 원소의 합, index는 검사를 위한 요소를 가리키는 숫자이다. 실제 콘솔값을 보면 가능한 조합에 대해 모두 검사함을 알 수 있다. 로직을 돌리기 전 오름차순으로 정렬하고 element마다 하나씩 검사한다. 각 e..
2021.03.29