File tree Expand file tree Collapse file tree 5 files changed +146
-0
lines changed
container-with-most-water
design-add-and-search-words-data-structure
longest-increasing-subsequence Expand file tree Collapse file tree 5 files changed +146
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution {
2+ /* * 시간 : O(n), 공간 : O(1)*/
3+ fun maxArea (height : IntArray ): Int {
4+ var maxDiff = 0
5+ var left = 0
6+ var right = height.lastIndex
7+ // left, right값을 순차적으로 조회해서 물높이를 구하고,
8+ // left < right값 보다 작으면 left증가시킨다. 반대는 right 감소
9+ while (left < right) {
10+ maxDiff = max(maxDiff, (right - left) * min(height[left], height[right]))
11+ // 너비 : right - left
12+ // 현재 높이 : min(height[left], height[right])
13+ // 너비 * 현재 높이가 maxDiff 비교하여 더 큰값이 maxDiff가 된다.
14+ if (height[left] < height[right]) {
15+ left++
16+ } else {
17+ right--
18+ }
19+ }
20+ return maxDiff
21+ }
22+ }
Original file line number Diff line number Diff line change 1+ class Node () {
2+ val map = mutableMapOf<Char , Node ?>()
3+ var isEnd = false
4+ }
5+
6+ class WordDictionary () {
7+
8+ val rootNode = Node ()
9+
10+ // 시간 : O(n), 공간 : O(n)
11+ fun addWord (word : String ) {
12+ var currentNode = rootNode
13+ for (i in word.indices) {
14+ val char = word[i]
15+ if (currentNode.map[char] == null ) {
16+ currentNode.map[char] = Node ()
17+ }
18+ currentNode = currentNode.map[char]!!
19+ }
20+ currentNode.isEnd = true
21+ }
22+
23+ // 시간 : O(26*n), 공간: O(n)
24+ fun search (word : String ): Boolean {
25+ return dfs(
26+ pos = 0 ,
27+ word = word,
28+ node = rootNode
29+ )
30+ }
31+
32+ fun dfs (pos : Int , word : String , node : Node ): Boolean {
33+ var result = false
34+ val char = word[pos]
35+ val isLast = word.lastIndex == pos
36+ node.map.forEach {
37+ if (char == ' .' || char == it.key) {
38+ if (isLast) {
39+ result = true
40+ return @forEach
41+ } else {
42+ result = result or dfs(pos + 1 , word, it.value!! )
43+ }
44+ }
45+ }
46+ return result
47+ }
48+ }
Original file line number Diff line number Diff line change 1+ class Solution {
2+ // 시간 : O(n), 공간 : O(n)
3+ // nums를 조회하면서 이전값과 비교하여
4+ // 더 증가하였으면 : 이전 카운트 +1
5+ // 같거나 작으면 : 이전 카운트값
6+ fun lengthOfLIS (nums : IntArray ): Int {
7+ val count = IntArray (nums.size)
8+ count[0 ] = 1
9+ var prev = nums[0 ]
10+ for (i in 1 until nums.size) {
11+ if (prev < nums[i]) {
12+ count[i] + = count[i - 1 ] + 1
13+ } else {
14+ count[i] = count[i - 1 ]
15+ }
16+ prev = nums[i]
17+ }
18+ return count.last()
19+ }
20+ }
Original file line number Diff line number Diff line change 1+ class Solution {
2+ // 시간 : O(y*x), 공간 : O(1)
3+ fun spiralOrder (matrix : Array <IntArray >): List <Int > {
4+ val result = mutableListOf<Int >()
5+ if (matrix.isEmpty() || matrix[0 ].isEmpty()) return result
6+
7+ var top = 0
8+ var bottom = matrix.size - 1
9+ var left = 0
10+ var right = matrix[0 ].size - 1
11+
12+ while (top <= bottom && left <= right) {
13+ for (i in left.. right) result.add(matrix[top][i])
14+ top++
15+ for (i in top.. bottom) result.add(matrix[i][right])
16+ right--
17+ if (top <= bottom) {
18+ for (i in right downTo left) result.add(matrix[bottom][i])
19+ bottom--
20+ }
21+ if (left <= right) {
22+ for (i in bottom downTo top) result.add(matrix[i][left])
23+ left++
24+ }
25+ }
26+
27+ return result
28+ }
29+ }
Original file line number Diff line number Diff line change 1+ package leetcode_study
2+
3+ class Solution {
4+ /* * 시간 : O(n), 공간 : O(n) */
5+ fun isValid (s : String ): Boolean {
6+ val stack = Stack <Char >()
7+ val openParentheses = " ([{"
8+ s.forEach {
9+ if (openParentheses.contains(it)) {
10+ stack.push(it)
11+ } else {
12+ if (stack.isEmpty()) {
13+ return false
14+ }
15+ val top = stack.pop()
16+ if (
17+ top == openParentheses[0 ] && it != ' )' ||
18+ top == openParentheses[1 ] && it != ' ]' ||
19+ top == openParentheses[2 ] && it != ' }'
20+ ) {
21+ return false
22+ }
23+ }
24+ }
25+ return stack.isEmpty()
26+ }
27+ }
You can’t perform that action at this time.
0 commit comments