Google 태그 관리자 아이콘
반응형

재도전하기 7

.leetcode(148. Sort List)

https://leetcode.com/problems/sort-list/ 3. 2022.04.08 시도 top-down 방식으로 다시 풀어봤다. 2. 2022.03.29 시도 소요시간: 30분 이상 소요 // 못 풀었다. 풀이 접근 과정 젤 작은거 찾아서 정렬해보자 느낀점 젤 작은거 찾아서 정렬했떠니Timeout이 났다. Merge Sort (divide and conquer)문제다. 드디어 만났는데 1년이 지나도 익숙하지 않다. top-down은 공간을 쓰지만 개념이 굉장히 쉽다. botton-up은 공간을 절약하는 대신 알고리즘이 어마무시하게 복잡해진다. 잘라내고 붙이고 그리고 이어가고 이런 작업이 쭉 훑었는데도 익숙하지 않다. 이건 조만간 다시 풀 각이다. 1. 2021.02.07 시도 소요시간..

알고리즘 풀이 2022.03.29

.leetcode(207. Course Schedule)

문제 https://leetcode.com/problems/course-schedule/ 문제 풀기 전 순환을 찾는 문제구나. 기존에는 사실 LinkedList기반아래에서 순환을 찾았는데 이렇게 배열단위의 순환은 처음이었다. 그래서 뭔가 Tores 이 방식으로 풀 수 있지 않을까 기대도 했었는데 링크드 리스트를 구지 만들어서 풀어야할까라는 생각이 들었다. 직접 푼 풀이 소요시간: 50분(22:13 ~ 11:03) 재도전하기 결국 못 풀었다. graph로 풀어보기, 기회가 되면 Tores and 요걸로 풀어보기 느낀점 솔루션 하나는 방향이 비슷하게 갔다. 다만 캐쉬를 세우지 못해서 못 풀었다. 캐쉬세우니 풀렸다. 2번째 방법은 graph를 이용한방법인데 처음 보는 풀이다. 이해하고 보면 결국 필수과목이 없..

알고리즘 풀이 2021.02.17

.leetcode(75. Sort Colors)

문제 https://leetcode.com/problems/sort-colors/ 문제 풀기 전 quick sort로 풀라는 걸로 들렸다. Lumoto방법만 알고 있었는데 hoare방법으론 안풀었는데 중복이기에 hoare방법으로 풀어야햇다. 직접 푼 풀이 재도전하기 느낀점 결론적으로 못 풀었다. hoare's방법을 봤을때 이해했다고 생각했는데 직접 짜보지 않아서인지 이해한게 아니었다. 근본적으로 lumoto와 접근방법이 다르다. lumoto는 요소하나를 중심으로 낮은거 높은거를 나누고 hoare는 그 중간요소를 찾는것부터 시작한다. 그 중간요소를 왼쪽 오른쪽으로부터 접근을 시작해서 찾고 그 다음에 그걸 중심으로 subarray를 재귀적으로 계산한다. "347. Top K Frequent Eleme..

알고리즘 풀이 2021.01.30

.leetcode(337. House Robber III)

문제 https://leetcode.com/problems/house-robber-iii/ 문제 해설 이 문제는 부모자식 트리로 직접 연결된 경우는 안되고 한칸 뛰어서는 도둑질이 가능한 문제이다. 문제 풀기 전 dp문제인걸 알았다. 이전결과가 현재결과를 얻는데 필요하니 말이다. 하지만 문제를 풀지는 못했다. 자바에서는 리턴을 하나라는 고정관념에 잡혀서 였다. 직접 푼 풀이 재도전하기 느낀점 리턴을 여러개 하고 싶으면 배열을 만들어서 쓰면 되었다. 사실 간단한 방법인데 자바에서는 잘 안쓰는 형식이기에 다른 방법이 있겠지하다가 결국 못 풀었다. 리턴에서 2개를 갖고 있어야하는데 바로 전단계와 , 전전단계의 데이터가 있어야 지금의 단계와 합할지 말지를 결정할 수 있기 때문이다. 아래는 솔루션에서 영감을 얻어 ..

알고리즘 풀이 2021.01.27

.leetcode(64. Minimum Path Sum)

문제 https://leetcode.com/problems/minimum-path-sum/ 문제 풀기 전 이건 왠지 dp로 풀 수 있을거같다는 감은 왔다. 직접 푼 풀이 소요시간: 40분 재도전하기 느낀점 결국 brute force로도 못 풀었다. dp로 푸는방식이 있다. 아래와 같다. 결국 dp로 푸는것은 지금의 값을 결정하는 요소들의 비교가 아닐까 하다. 아래 푸는 방식을 보면 합해진 값의 오른쪽과 합해진 값의 아래쪽 중에 작은걸 선택해서 0,0까지 더하는 방식인데 이걸 잘 기억해두면 다음법 dp스러운 문제를 봐도 힌트가 될 것이다. 솔루션 공부 후 추가로 푼 풀이 class Solution { public int minPathSum(int[][] grid) { for (int i=grid.lengt..

알고리즘 풀이 2021.01.21

.leetcode(238. Product of Array Except Self)

문제 https://leetcode.com/problems/product-of-array-except-self/ 문제 풀기 전 다 곱해서 하나씩 나누면 O(n)이나 나누기를 쓰지말라는 조건에 걸린다. 하나빼고 다 곱하면 O(n^2)으로도 풀 수는 있다. 그전까지의 곱을 모두 저장하고 있다면 계산이 좀 빠르지 않을까. 직접 푼 풀이 소요시간: 47분(21:08 ~ 21:55) 재도전하기 끝내 풀지 못했다. 느낀점 지금까지 문제를 30개정도 풀었는데 이건 진짜 멋진 문제다. 풀이에 대한 고정관념(다 곱한것에서 하나만 나눈다)를 막으니 분명 쉬운 문제같은데 풀리지가 않았다. 아직 멀었다. 그리고 솔루션을 확인하고 나서는 진짜 멋있는 문제라고 생각했다. 개념은 사실 left, right에 있었다. 꼭 다시 풀어..

알고리즘 풀이 2021.01.17

.leetcode(763. Partition Labels)

문제 https://leetcode.com/problems/partition-labels/ 문제 해설 문제는 같은 단어는 무조건 같은 블록으로 보면서 여러 블록으로 나누는 수가 가장 많은 방법을 찾는 것이었다. ex) ABBAC => 2개(ABBA, C) 왜냐하면 A라는 글자는 한 블록안에 있어야하므로 마지막 A가 나올때까지는 무조건 한블럭으로 본다. ex) ABCAC => 1개(ABCAC) 왜냐하면 A라는 글자만 보면 마지막 A가 나오는 ABCA까지를 한블록 후보자로 볼 수 있는데 그 사이에 B,C가 있으므로 마지막 B,C가 나오는데까지를 한 블록으로 봐야한다. 따라서 ABCAC가 한 블록이고 리턴은 1개가 된다. 문제 풀기 전 (문제이해를 잘못한 상태) 가장 많은 글자를 포함하되 가장 많이 쪼개라 글..

알고리즘 풀이 2021.01.13
반응형