일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- VCS
- heap
- Java
- BFS
- 자료구조
- graph
- A* Algorithm
- LinkedList
- sorting
- dfs
- greedy
- DailyLeetCoding
- ArrayList vs LinkedList
- Leedcode
- stack
- String
- Two Pointers
- 구현
- hash table
- python3
- Medium
- Easy
- array
- Bellman-Ford
- Hashtable
- Union Find
- hash
- 광연자동차운전면허학원
- SinglyLinkedList
- leetcode
- Today
- Total
목록분류 전체보기 (88)
Min IT's Devlog
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/FCZiV/btsaeUp9ZRD/UrbAbP8mXw8ylzfnJsH8f1/img.jpg)
풀이 일자: 23.04.14 난이도: [Medium] 분류: [DP] 문제 내용 s가 주어졌을 때 해당 s의 subsequence 중 가장 긴 회문의 길이를 구하는 문제이다. subsequences > 0개 이상의 원소를 삭제함으로써 반들어지는 substring으로 보면 된다. 회문 > 앞으로 읽어도 뒤로 읽어도 똑같은 것을 의미한다. ex)기러기.. 문제 해결 흐름 1. 처음 이 문제를 보고 떠오르는 알고리즘은 two-pointer나 DP정도뿐이었다. → 그 이유로는 전체를 일단 쪼개서 작은 것부터 처리하고 점차 붙여나가면서 답을 만들어가는 해결방식뿐이었다. dp[i][j] = i ~ j번째의 문자를 이용하여 만들 수 있는 최대 회문의 크기 dp[i][i] = i ~ i번째의 문자를 이용하여 만들 수 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/csYMp0/btr9C5lHHTg/VV8SshNQ9km2mjkU47L9E1/img.jpg)
풀이 일자: 23.04.12 난이도: [Medium] 분류: [String, Stack] 문제 내용 절대경로를 간단한 캐노니컬 경로로 바꿔서 리턴하는 문제였다. 문제 해결 흐름 1. 가장 먼저 떠오른 방법은 path의 글자를 하나씩 읽어가면서 stack에 넣고 ..와 .에 따라 처리해주는 방법이었다. => 결과는 여러 경우의 수를 따져가면서 처리를 하나씩 해줬는데 실패였다. 이런 예외사항을 고려하면 다른 게 또 걸리고 그런 식이었다. 다른 방식을 생각해보자. 예외의 경우 /./..stack /hi///.././.. class Solution: def simplifyPath(self, path: str) -> str: ans = ['/']; dotCnt = 0; for s in path: if s == '..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Z9dL7/btr8tve0a4k/kr3LPdYZ2AXkJhyZVkipH1/img.png)
https://www.youtube.com/watch?v=mQGwjrStQgg&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&index=5&ab_channel=SungKim 위의 Sung Kim 교수님의 Basic Machine/Deep Learning 강의를 듣고 정리했고 추가적으로 알고 있는 내용에 대해 덧붙인 글입니다. ML Lec 02 Predicting exam score => 공부한 시간(x)과 실제 성적(Y)이 담긴 데이터를 학습시켜서 공부한 시간에 대한 test_data를 제공했을 때 예상되는 성적을 리턴하는 것이 목표. => 예를 들어 면적이 넓을 수록 집이 비싸다는 사실처럼 생활 속에 Linear한 경우를 찾기 쉽다. Linear Regression 1. Lin..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/P5IF4/btr8xOjnOhe/xN8cxwPQJ2xwH5JKrAjH20/img.jpg)
풀이 일자: 23.04.06 난이도: [Medium] 분류: [Array, DFS, BFS, Union Find] 문제 내용 문제의 내용은 0(land), 1(water)로 이루어진 배열이 주어졌을 때 사면이 물로 둘러싸여있는 섬의 수를 구하는 문제였다. 문제 해결 흐름 1. 일단 가장 먼저 떠오른 방법은 Union-Find이긴 했다. → 1의 group과 0의 group으로 나눠질거고 0내부에서도 각 섬별로 grouping이 되는거니까 Union-Find로도 가능하다. 2. Union-Find는 간단하지만 더 쉬운 방법을 찾아볼 필요가 있다. DP나 DFS정도를 생각할 수 있겠다. → DP는 점화식을 뽑아야 하는데 그것보다는 더 쉬운 방법일 수 있는 DFS를 선택하자. 3. 우선 edge에 0이 등장한..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/mqCho/btr8hozSJuW/P4DwsOOAlSwutVLcFEbVK1/img.png)
https://www.youtube.com/watch?v=BS6O0zOGX4E&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&ab_channel=SungKim Sung Kim 교수님의 Basic Machine/Deep Learning 강의를 듣고 정리했습니다. ML Lec 01 Machine Learning - 기존의 spam filter나 자율주행자동차의 경우 사람들이 모든 경우의 수를 명시적으로 프로그램하기에 너무나 많은 규칙이 있기 때문에 그냥 하기 어렵다. => 59' Arthur > 명시적으로 프로그래밍하는 것이 아니라 컴퓨터가 자료에서 학습하게 하면 되지 않을까라는 아이디어제시 Supervised Learning => label이 붙은 데이터를 가지고 학습시키고 새로운..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Lctle/btr8gxpExep/LVLJHglIJNRnQsKpa2ylg1/img.jpg)
풀이 일자: 23.04.05 난이도: [Medium] 분류: [Array, Prefix Sum] 문제 내용 nums배열이 주어졌을 때 이는 n의 음수가 아닌 정수를 포함하고 있다. 이때 1~n-1의 인덱스를 골라 그 인덱스를 i번째라고 한다면 nums[i]는 1을 줄이고 nums[i-1]는 1을 증가시켜서 배열의 최댓값이 최소가 되도록 만드는 문제이다. 문제 해결 흐름 1. 최대한 Greedy하게 풀면 되지 않을까라는 생각을 해보았다. ( Fail to Solve) → 배열에서 가장 큰 값과 큰 값을 기준으로 왼쪽에 있는 값들중 가장 작은 값을 비슷하게 만들다보면 뭔가 평균에 수렴하지 않을까라는 생각에 기반하였다. 문제) -1 +1 응용) -1 +1 -1 +1 --------- -1 0 +1 => 위의 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/QD31u/btr7StaDTQD/97oiYwTQOk7P5mJXFkIofK/img.jpg)
풀이 일자: 23.04.04 난이도: [Medium] 분류: [Hash Table, String, Greedy] 문제 내용 s라는 문자열이 주어졌을 때 이를 여러 개의 subString으로 자른다고 했을 때 각각의 subString 내의 중복되는 문자가 unique하게 자를 때 최소한으로 나오는 subString의 갯수를 리턴하라는 문제이다. 문제 해결 흐름 1. 일단 가장 간단하게 생각하면 앞에서부터 탐색하면서 카운팅하면 되겠네. → 앞에서부터 array에 문자를 넣기 시작하다가 array내부에 있는 문자가 나오면 ans+=1을 하고 거기서부터 다시 나온 문자에 대해 history를 저장하면 되겠다. class Solution: def partitionString(self, s: str) -> int:..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/R38o7/btr7iMvefFl/5UQ8cHgx8WDbHh6FtMiz41/img.jpg)
풀이 일자: 23.04.03 난이도: [Medium] 분류: [Array, Two Pointers, Greedy, Sorting] 문제 내용 사람들의 무게가 담긴 people이라는 배열이 주어졌을 때 최대중량이 limit인 배를 이용해 최대 2명의 사람들을 운반하고자 한다면 최소 몇 개의 배가 필요한지에 대한 문제였다. 문제 해결 흐름 1. 제일 먼저 떠올릴 수 있는 건 Greedy가 제일 먼저 떠오르겠다. → 최소한으로 옮겨야 하므로 Greedy하게 무게가 제일 많이 나가는 애랑 적게 나가는 애랑 같이 운반할 수 있다면 최소가 되겠네 2. 무게의 순서가 중요하니까 people에 대한 sort는 필수적이다. → sort를 해서 시작점과 끝점에 포인터를 두고 가장 무게가 큰 것부터 시작해서 되도록 맨 앞에..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bmjdtA/btr7gQw8W45/ulhpjIMal5L68SdjqkGRr1/img.jpg)
풀이 일자: 23.04.02 난이도: [Medium] 분류: [Array, Two Pointers, Binary Search, Sorting] 문제 내용 문제의 내용은 정수가 담긴 2개의 배열이 주어지고 이 배열들 간의 이루어질 수 있는 원소들간의 곱이 success라고 하는 기준점 이상인 경우를 count해서 spells 기준으로 가능한 경우의 수를 리턴하는 문제이다. spells = [5,1,3], potions= [1,2,3,4,5], success = 7 spells = 5 => [5,10,15,20,25] # successful 횟수는 4 spells = 1 => [1,2,3,4,5] # successful 횟수는 0 spells = 3 => [3,6,9,12,15] # successful 횟수..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bkvNp7/btr5aFC7bMx/t2eAKltSGhGXP6aIqU45kk/img.jpg)
풀이 일자: 23.03.21 난이도: [Medium] 분류: [Array, Math] 문제 내용 문제 내용은 Array 하나 받아서 0으로만 이루어진 subarray가 몇 개 나오는지 리턴하는 문제였다. 문제 해결 흐름 1. 딱히 생각나는 알고리즘이 없다. 열심히 처음부터 정직하게 탐색해서 0의 위치만 확인하면 되겠다. → Linear Search하다가 0이 보이기 시작하면 0에 대한 count를 시작한다. 0이 나오다가 다른 게 나오면 수학적 계산 예를 들어, [0,0,0,0]이 연달아 4번 나왔다고 하자.. [0]인 subgroup이 4개 [0,0]인 subgroup 3개 ..... [0,0,0,0]인 subgroup이 1개. => 결과적으로 n개의 0이 연달아 나오는 경우 n(n+1)/2개의 sub..