프로그래밍-코딩테스트/LeetCode(84)
-
[Stack] Daily Temperatures
T라는 daily temperatures가 주어질때, 그 다음 더 큰 온도(warmer temperature)는 몇개의 원소뒤에 나오는지를 value로 표현한 배열을 리턴하라는 뜻이다. 예컨데 [ 70, 71, 65]라면 70보다 큰 온도인 71은 1회, 71,65보다 큰 온도는 아예 나오지 않았으므로 0회이므로 [1, 0, 0]으로 표현된다. 우선 결과배열을 만들고 T의 길이만큼 0으로 채워주는 값을 디폴트로 정한다 이중For문을 이용하여 일일이 돌릴수도 있지만, 연산하지 않아도 되는 원소는 연산하지 않기 위해 Stack을 사용하였다. 앞에 나온 원소는 뒤에서 비교할 필요가 없으므로 Stack에 넣어주는 것이다. 지속적으로 인접한 원소의 크기를 비교해주는 방식이다. stack에 index들을 넣어두고,..
2021.03.27 -
[Array] Subsets
집합이 Input으로 주어질 때, 모든 가능한 subset의 배열을 리턴하라.(이를 power set이라 부른다) 모든 케이스를 카운팅하므로 재귀가 필요하다 이 재귀는 조건에 따라 index를 1씩 증가시키며 필요한 만큼 Loop를 돈다 예컨데 [1,2,3] 배열이 input으로 들어오는 경우, 첫 Loop인 [ ] 에 대해서는 index 1,2,3의 케이스로 Loop를 돈다 각 index에 대해서는 해당 index보다 크고 3보다 작은 케이스만 Loop를 돌것이다.
2021.03.27 -
[backtracking] Generate Parentheses
Leetcode에 분류가 backtracking으로 있어서 소제목을 그렇게 붙이긴 했는데, 어느 범주에 넣어야 할지 모르겠는 문제 무튼 Parentheses문제는 이전에 stack으로 한번 풀었지만, 요 문제는 범주가 다르다 숫자가 주어지면, 그 갯수만큼 well-formed한 parentheses를 만들어야 한다. recursion을 이용했다. 예를들어 n이 3이라면, 괄호가 총 3짝이 쓰였다는 뜻인데, 일일이 만들기에는 일일이 Loop를 도는것보다, 재귀가 더 간편할거라 생각했기 때문이다. recursion 함수는 결과배열, 괄호모양, n을 args로 받는다 이때 n은 left, right로 나누어 받을것이고, 이를 recursion에 이용할때 괄호의 모양을 다르게 한다. left와 right가 0이..
2021.03.26 -
[Tree] Binary Tree Inorder Traversal
그냥 순서대로 Tree를 Traverse하기 으레 그렇듯 Tree 문제는 recursion을 먼저 떠올리면 된다. result 배열을 만들고, traverse 함수를 정의한다. traverse함수는 각각 left와 right노드에 대해 recursion을 실행하고, value를 result에 차곡차곡 담는다. 단 주의할부분은 traverse이므로 left노드 -> root 노드-> right노드 순으로 순회해야 한다는 점이다.
2021.03.26 -
[Array] Permutations
배열이 주어지면 해당 원소들로 만들 수 있는 순열 케이스를 모두 구하는 문제 input이 아예 없거나 하나인 경우는 일단 걸러준다. 이후 Loop를 돌면서, 순회 차례가 된 원소를 제외하고 나머지를 recursion으로 넘겨준다. 이때 recursion의 결과인 res는 배열로 나올것이므로, 다시 순회하며 결과를 하나씩 만들어준다. 이렇게 하는 이유는, 나머지를 가지고 만든 순열의 경우의 수에 순회 차례가 된 원소만 concat으로 붙여주면 해당 배열로 만들 수 있는 모든 경우의 수가 되기 때문이다. 이러한 행위를 순회하면 모든 경우의 수를 구할 수 있다.
2021.03.26 -
[Queue] Queue Reconstruction by Height
2차원 배열로 이루어져있는 데이터의 각 원소는 [height, number]로 구성되어 있다. 이때 number는 특정 원소보다 앞에 있는 원소의 height가 같거나 높은 원소의 갯수를 말한다. 예를들어 [ [1,0], [2,0], [1,2] ] 이라는 배열이 있다면, 세번째 원소는 height가 1이고, 그 앞에(in front) 1보다 크거나 같은 원소가 두개 있으므로 number가 2가 된다. order가 무작위로 들어오는 이 이차원 배열을 순서대로 reconstruct하라는 것이 문제이다. 그저 데이터를 queue로 관리하기만 하면 되는 간단한 문제다. 일단 height에 대해 내림차순으로 정렬한 후, 같은 숫자에 대해서는 number에 대해 내림차순으로 정렬한다. 이 문제가 greedy인 이유..
2021.03.26