https://leetcode.com/problems/lemonade-change/예전에 한번 풀었던 문제였다. 어렵지 않게 풀 수 있었다.
https://leetcode.com/problems/last-stone-weight/이전에는 못 풀었던 문제였는데 이번엔 다시 잘 풀었던 것 같다. 그러나 스터디원들과의 얘기를 통해 Priority Queue를 사용해 푸는 방법이 가장 Optimal하다는 것
Linked List를 실제 문제에서 접한 건 처음이었다. 혼자 못 풀었지만 다행히 Dicussion을 보고 이해할 수 있는 수는 있었다.가장 헷갈렸던 부분이 merge.next = l1부분 이었는데, 이는 내가 Input에서 보여지는 것처럼(l1=\[1,2,4]) 단
어제에 이어 두 번째 Linked List 문제였다. Swap에 대한 이해가 부족해 이번 문제도 Discussion과 스터디원들의 도움으로 이해했다. 매일 스터디하면서 푸는 문제들 말고 따로 스스로 Linked List문제를 몇 가지 더 풀어봐야 할 것 같음.문제 링크
💡풀이 📝정리 Stack, Divide and Conquer, recursive 등 여러 방법이 있었다. 그 중 나는 Stack을 선택해서 문제를 풀었는데, 마지막 조건인 해당 조건에 대한 답을 결국 스스로 해결하지 못하고 Discussion을 참고했다. 맨 앞
혼자 못 풀었다. 문자열을 조작하는 문제를 더 접해봐야함. 잘 안되더라도 스스로 생각해서 풀기 계속https://leetcode.com/problems/excel-sheet-column-number/https://github.com/tTab1204/L
혼자 해결은 했지만 시간 복잡도 측면에서 매우 효율이 좋지 않았다. 마지막 방법은 Discussion에서 봤음. sum2와 sum1의 요소를 각각 다 더해준 뒤(charCodeAt으로 변환한 뒤) 마지막에 sum2에서 sum1을 뺀다면 그게 남은 알파벳은 charCod
https://leetcode.com/problems/reveal-cards-in-increasing-order/https://github.com/tTab1204/LeetCode/tree/main/%EC%A3%BC%EC%98%81
O(N)의 시간복잡도와 O(1)의 공간복잡도로 풀 수 있는지(정렬할 수 있는지) 물어보는 문제였다. 정렬 알고리즘을 더 공부해야 할 듯.https://leetcode.com/problems/sort-colors/https://github.com/tTa
💡풀이 📝정리 시간이 걸렸던 부분이다. else를 쓰지 않고 if만 쓴 상태에서 왜 안되는지 한참 고민하고 있었다. hash table을 사용하여 풀었다. 문제 링크 https://www.notion.so/LeetCode-9ad980c1d8624f76bfea
hash를 사용하여 풀었다. 위에 주석 처리된 코드들은 내가 모든 사람이 judge를 믿지 않는 경우 / 믿는 경우를 판별하는 조건을 생각하지 못했을 때 적었던 코드들이다.https://leetcode.com/problems/find-the-town-judge
💡풀이 📝정리 Hash를 사용하여 풀었다. 크게 어렵게 풀진 않았다. 문제 링크 https://leetcode.com/problems/ransom-note/ LeetCode GitHub https://github.com/tTab1204/LeetCode/tree/main/%EC%A3%BC%EC%98%81
Grid 문제다. 결국 혼자 못 풀고 Discussion의 도움을 받았다. 이 쪽 문제를 내가 좀 힘들어해서.. 다른 스터디원분이 더 풀어볼 수 있는 문제를 추천해주셨다! 감사합니다 :)뒤의 두 방법은 다른 스터디원 분께서 해결하셨던 두 가지 방법이다. 자세한 설명은
비교적 쉽게 풀었다. i<arr.length-1의 이유는 마지막 인덱스에서 i+1이 배열을 over하기 때문이다. https://leetcode.com/problems/minimum-absolute-difference/https://github.
스스로 완전히 해결하지 못하고, Discussion의 도움을 받았다. 코드를 요약하자면, max(i+nums\[i]가 nums.length - 1 보다 커지는 경우를 찾을 때 true를 반환, 그렇지 않을 경우에는 false를 반환해야 한다.max === i의 경우 e
완전 탐색으로 풀었다. 시간 복잡도 측면에서 더 좋은 방법이 있을 것 같은데 아직은 스스로 생각해내지 못했다.수정, 지적을 환영합니다. 스스로 풀지 못하고 Discussion의 도움을 받은 문제이기 때문에 오류가 있을 수 있습니다.https://leetcode
오늘도 스스로는 못 풀었다.DP와 관련된 문제다. 이런식으로 path의 최소값을 찾는 문제다.좋은 스터디원 분들을 만나서 그 분들의 풀이와 설명을 아무런 대가 없이 받는 느낌이라 항상 감사합니다!수정, 지적을 환영합니다. 스스로 풀지 못하고 Discussion의 도움을
문제는 이런 식으로 위와 같이 가장 큰 면적의 수조를 구하는 문제다.(자세한 문제 설명은 아래 링크 참고)수조 면적이 최대가 되어야 하는데, 이 면적은 height 배열의 가장 작은 요소에 의해 제한되기 때문에 curHeight라는 변수를 따로 만들어 지속적으로 업데이
ASCII code랑 charCodeAt, charAt 등의 메소드에 더 익숙해져야 함. 문자열 관련 문제를 더 풀어서 자유롭게 문자열을 다룰 수 있어야 함.문제는 i, j라는 두개의 포인터를 차감하며 자릿수를 계속 더해주는 방식이다. 그렇지만 sum이 10을 넘어버려
이 풀이는 제 풀이가 아닌 다른 스터디원 분의 풀이를 보고 제가 이해한 부분을 옮긴 코드입니다. 기본적으로 Set을 사용해 중복 제거를 하셨고, 중간에 한번이라도 중복이 있다면 false를 return 시키는 형태입니다.저희 스터디원 분들의 풀이, 설명 항상 감사합니다
💡풀이 📝정리 Hash Table의 key를 활용하여 풀었다. Group Anagram끼리 obj 객체를 하나 생성해 key를 이용해 묶어준 뒤, obj 객체의 values를 return 하는 식으로 풀었다. > 수정, 지적을 환영합니다! 문제 링크 https
내 풀이는 모든 부분을 탐색하면서 boxes\[j] === '1'일 때 마다 sum을 더해주는 식이었다. 뭔가 다른 방법이 있을 것 같아서 생각을 해봤지만 다른 방법을 생각하지 못했던 문제였다. (내가 사용한 방법은 절반 정도의 성능 - 생각하기 쉬운 방법)이후 리뷰
문제는 0과 s.length 사이의 숫자들을 I(=0일 때)와 D(s.length일 때)가 나올 때를 구분하여 넣어주는 것이다.두 개의 포인터 j, k를 사용하여 s\[i] === 'I'일 경우에 j를 더해주고, 반대의 경우에는 k를 더해주면서 s의 길이에서 그만큼 빼
'중요 부분'이라고 적힌 부분을 제외하면 쉽게 생각할 수 있던 부분이라 생각한다. 저 부분이 중요한 이유는 배열의 양 끝에 꽃을 심어야 하는 경우(배열의 양 끝의 요소를 0 -> 1로 바꿔야 하는 경우)를 고려해야 하기 때문이다. 배열의 양 끝에 꽃을 심는 경우는 반복
'중요 부분'이라고 적힌 부분은 내가 스스로 해결하지 못했던 부분이다. 첫 번째 이중 loop이 끝난 뒤, horizontalArray와 verticalArray 배열에는 각각 이렇게 요소가 담긴다.output은 두 배열의 각 요소의 차이의 합계를 구하는 것이었기 때문
start에서 finish까지 갈 수 있는 모든 경우의 수를 구해야 한다. 문제 파악이 느려서 스스로 못 풀었다. DP 관련한 명확한 설명은 이 링크를 참조하자. 대략적인 규칙은 다음과 같다.위 그림에서 볼 수 있다시피 아래의 요소와 좌측의 요소를 합하면 자신의 값이
먼저, 정렬을 위해 sort 메서드를 사용했고, 원본 배열이 바뀌지 않게 spread 연산자와 함께 사용했다.이후 Rank를 지정해주기 위해 2번의 방법을 사용했다. (객체 사용)마지막으로 매개변수로 전달받은 arr을 순회하며 answer 배열에 담아줬다.수정, 지적을
위는 내가 푼 방법이다. 처음에는 includes 조건 하나만 사용했었으나, 요소 중 0이 있는 경우는 false로 반환해야 하지만 true로 반환하기 때문에, (0/2 === 0) arr.indexOf(arr\[i] / 2) !== i) 라는 조건을 추가해줬다.아래의
💡 풀이 📝 정리 DFS를 이용한 문제다. 그 동안 DFS, BFS에 대한 이해가 매우 부족해서 관련된 문제를 거의 풀지 못했었는데, 이번에 이 영상을 보고 조금은 더 이해를 한 것 같다. DFS, BFS에 관한 설명은 해당 영상을 보는게 훨씬 이해가 빠를 것이
grid를 구른 공이 어느 column으로 떨어질지 묻는 문제였다. 만약 길이 막혀있다면, 서로 다른 column에서 출발한 양쪽 공은 모두 -1이 된다. 자세한 설명은 주석으로 하겠다.수정, 지적을 환영합니다!https://leetcode.com/proble
풀이에 대한 자세한 설명은 주석으로 하였다. 방을 열 수 있는 key는 배열의 index값이기 때문에, 유일한 값들의 집합인 set을 사용하였다. 유일한 값들의 집합인 set과 rooms 배열의 길이가 같다면 rooms 배열의 모든 key가 있다는 뜻이기 때문에 두 값
💡 풀이 📝 정리 Greedy로 푸는 기초 유형의 문제다. 위는 내가 처음 푼 방식이고, 아래는 다른 사람의 풀이를 내가 약간 변형한 방식이다. 설명은 위의 주석과 아래 그림으로 대체하겠다. > 수정, 지적을 환영합니다! 문제 링크 https://leetco
처음 문제를 봤을 때, costs\[i]\[0]과 costs\[i]\[1] 중에 더 작은 값을 이용해 정렬을 변경해서 진행하는 줄 알았다. 조금 더 오래 고민하다, 결국 회사 입장에서는 최소가 되는 비용을 지불해야 하는 것이니, '누가 더 값이 작냐'가 문제가 아니라
이 문제는 대표적인 Greedy 문제라고 한다. 요즘 Greedy 관련 문제를 연습 중이었는데, 이전에 풀었던 문제와 큰 차이가 없어서 오랜 시간 동안 고민하지는 않았다.문제는 interval이 겹치지 않게 하기 위해서 구간을 제거해야 하는데, 어떻게 하면 최소로 구간
기본 DP 문제로 볼 수 있다. 계단을 오르는 데 최소 비용이 얼마냐고 묻는 문제인데, 규칙을 찾으면 위와 같이 dp\[i] = Math.min(dp\[i - 1] + cost\[i - 1], dp\[i - 2] + cost\[i - 2]) 작성할 수 있다. 수정, 지
💡 풀이 📝 정리 기본 DP 문제로 볼 수 있다. 계단을 오르는 데 최소 비용이 얼마냐고 묻는 문제인데, 규칙을 찾으면 위와 같이 dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]) 작성할 수
혼자서 해결하지 못한 DP 문제였다. 맨 위의 코드는 답은 구할 수 있지만 시간 초과로 실패한 코드다. 이렇게 시간을 초과하게 된다면 이미 찾았던 값은 기억을 해두는 DP를 사용해 시간을 줄여야 한다. 수정, 지적을 환영합니다!https://leetcode.c
정석적인 DP 문제가 아닌, 변형이 있는 DP 문제였다. Brute force로 푼다면 O(n\*n)의 시간 복잡도로 풀 수 있었을 것이다. (모든 부분 배열의 합을 비교함)카데인 알고리즘(참고 링크)을 이용하면, O(n)의 시간 복잡도로 문제를 풀 수 있다.카데인 알
이전에 풀었던 카데인 알고리즘을 이용해 풀었다. 이전 문제와 가장 두드러지는 차이점은 두 개의 dp 배열을 만들었다는 점이다.이 문제를 풀기 위해 최소값을 저장한 minDp 배열과 최댓값을 저장한 maxDp 배열을 두개 만들었다. 이후 점화식 minDp에 관련된 Mat
문자열을 다루는데 연습하기 좋은 문제였다. palindrome이란, 거꾸로 뒤집어도 같은 문자열인지 말하는 것이다. (예를 들어, 'aaacaaa'는 palindrome이 맞다.)palindrome 자체를 판별하는 건 어렵지 않다. 두 개의 포인터를 이용해 반복문을 돌
슬라이딩 윈도우 알고리즘(참고 링크)을 사용한 배열 문제다. 해당 알고리즘에 대해 매우 상세하게 정리된 링크이니 참고하도록 하자! 문제를 보면, pivot이 되는 index가 있고, 그 index를 기점으로 왼쪽에 있는 요소들의 합과 오른쪽에 있는 요소들의 합이 같아야
이 문제는 투 포인터의 기본적인 동작을 알 수 있는 문제라고 소개한다.(Leetcode에서)그냥 문제에서 제시한대로 splice 메서드를 이용한다면 O(N\*N)의 시간복잡도로 문제를 해결할 수 있다. 그러나 투 포인터를 사용한다면 O(N)의 시간복잡도로 문제를 해결할
이전에 풀었던 문제(링크)와 유사하게 슬라이딩 윈도우 알고리즘(참고 링크)을 사용한 배열 문제다. target === Subarray의 합계가 되어야 하는데, 조건을 만족하는 Subarray중 가장 짧은 길이를 가진 Subarray의 길이를 return하면 되는 문제다
QuickSort의 작동 방식과 매우 유사하다. in-place로, O(N)의 시간복잡도로 nums 배열을 정렬해야 했는데, 포인터 3개(isZero, isTwo, i)를 사용해 스왑을 진행하며(QuickSort) 정렬하면 O(N)의 시간복잡도와 in-place로 문제
유사 문제: https://velog.io/@ken1204/435.-Non-overlapping-Intervals이전에 풀었던 유사한 문제가 생각나서 어렵지 않게 풀 거라고 생각했지만, 조금 시간이 걸린 문제였다. return 할 때, 공간복잡도를 O(1)으로
💡 풀이 📝 정리 1. 먼저 처음 내가 푼 방법이다. 시간 복잡도 O(NlogN)으로 풀었던 방법이다. 위의 그림을 참고해서 nums 배열과 sorted 배열을 비교하자. 원본 배열 nums와 nums를 정렬한 배열 sorted라는 배열을 준비한다. 이후
맨 처음 leetcode 문제를 풀었을 때 접했던 문제였다. 당시에는 반복문을 두 개 사용해서 O(N\*N)의 시간 복잡도(Brute Force)로 문제를 해결했었다. 그 때는 시간 복잡도에 대한 개념도 자세히 안 잡혀있었고.. 단순히 문제를 풀어냈다는 사실 자체가 좋
참고할 문제: Two Sum이번 문제는 스스로 못 풀었고, 스터디원분의 도움을 받아서 풀었습니다. 푸는 방식 자체는 two Sum 문제와 유사하지만, pointer 3개를 사용한다는 점과 중복을 허용하지 않는다는 점(가장 고생했던 부분입니다..)이 다른 점이라고 볼 수
String 관련해서 간단한 문제다. slice 함수를 이용해서 반복문을 돌때마다 rotate를 시켜주고, 두 string이 같은 순간이 오면 true를 return 해주면 된다.간단한 풀이보다는 String matching 관련 문제에서는 두 알고리즘을 기억하고 있어
풀이 자체는 일찍 생각했는데.. 코드로 구현할 때 시간이 오래 걸렸던 문제였다.문제의 요구사항은 주어진 string에서 하나의 요소를 제거했을 때, 해당 string이 Palindrome이 될 수 있냐를 return 해야한다. 풀이는 다음과 같다.기존의 Palindro
💡 풀이 📝 정리 유사 문제: https://velog.io/@ken1204/724.-Find-Pivot-Index Sliding Window 알고리즘 참고 링크: https://m.blog.naver.com/kks227/220795165570 문제는 중복되
stack과 관련한 문제다. 무의식적으로 괄호가 있는 문제만 보면 stack으로 생각하게 되는 습관이 들어버렸다..하하.. 시간 복잡도 O(N), 공간 복잡도 O(N)으로 문제를 해결하였다.먼저, stack 배열을 선언해주고 답이 될answer = \[...s](=s.
💡 풀이 📝 정리 stack과 관련한 문제를 연습 중이다. 문제의 요구사항은 괄호가 올바르게 닫히냐를 판별하라는 것이다. 아래 예시를 보면 바로 알 수 있을 것이다. 문제에는 소괄호, 중괄호, 대괄호의 3종류의 괄호가 존재한다. 여는 괄호가 나올 때는 같은
getMin()을 구하는게 주된 문제인데, 난 처음엔 단순히 Math.min(...this.stack)을 사용했다가 시간이 너무 높게 나와서 다른 방법이 있을 것 같아서 생각을 해봤다.두 번째 풀이는, node라는 객체를 하나 만들어 준다. 객체의 프로퍼티로는 val
시간복잡도는 O(k\*N), 즉 O(N)이다. stack을 이용해 해결하였다. 문제의 요점은 k개 동안 요소가 중복된다면, 해당 요소를 제거해야 된다는 의미이다.k가 2일때는 stack.top과 s\[i]가 같은지 비교해서 같다면 pop만 해주면 됐는데, k가 3,4,
역시 stack을 이용한 문제다. O(N)의 시간복잡도로 해결하였다. 해결 방안 자체는 많이 어렵지 않게 생각한 편이지만 그걸 코드로 구현하는 데에 매우 오래걸렸다..! (해결은 했는데 속도도 그리 빠르지는 않다.)이전에 풀었던 문제와 비슷하게 두 개의 stack이 필
💡 풀이 📝 정리 어제에 이어서 stack을 이용한 문제였다. 후기 이미 stack 문제를 계속 연습 중이어서, stack에 맞춰 생각을 해서 그런지 방법 또한 오래 걸리지 않게 생각을 한 문제였다. 문제는 그걸 코드로 구현하는데 정말 오래 걸렸다는 것인데.
HashMap의 기초 문제라고 볼 수 있다. 중복된 문자가 있다면 obj객체에서 해당 key에 해당하는 value 값은 1보다 클 것이다. 그 후 Object.entries(obj)를 이용한 반복문을 사용해 반복이 되지 않는, 즉 value가 1인 key가 있다면 an
마찬가지로 HashMap에 관련된 문제다. 시간 복잡도는 O(N)이며, s, t 두 string이 isomorphic한지 체크하는 문제다.obj 객체를 먼저 하나 선언해준다. 반복문을 돌며 obj 객체의 key를 s\[i]로, value를 t\[i]를 만든다. 그 과정
역시나 HashMap 관련 문제다. keys 배열을 정렬할 때 NlogN의 시간이 걸렸다. 문제의 요구사항은 - words 배열의 단어가 나온 횟수에 따라 정렬하되, output 배열의 length는 k여야 한다. 또한, 나온 횟수가 같다면 사전 순서대로 정렬해야 한다
유사 문제: 바로 이전에 풀었던 문제와 매우 유사하다. 중요한 부분은 정렬 없이 구현한 아래 방법인데, 이 방법의 시간 복잡도는 O(N)이다. 아직 아래 방법은 확실히 이해가 안되서 설명은 나중에 이해가 됐을 때 추가 작성할 예정이다!나는 위의 방법(정렬)으로 풀었는데
개인적으로 prototype보다 class로 구현하는게 더 직관적이라고 생각해서 class를 사용하였다!문제의 요구사항은 '중복을 허용하지 않는 자료구조 Set을 직접 구현해볼 수 있나요?(시간 복잡도 O(1)으로' 였다. remove() 를 구현하는 부분에서 시간이
어려웠다. Hash Map 관련 문제에서 자주 나오는 유형이라고 들었는데 처음 접해서 더 어렵게 느껴진 것 같다.먼저, 이 문제를 이해하려면 이전에 풀었던 Two Sum(링크: https://velog.io/@ken1204/1.-Two-Sum) 문제를 이해해야
BackTracking의 기초적인 문제로 알고 있는 문제였는데, 이번에 BackTracking을 공부하면서 풀게 되었다. 이 알고리즘에 대한 간단한 설명은 여기 링크를 참고하면 좋을 것이다.키패드는 다음과 같다.먼저, 문제의 요구사항은 다음과 같다 digits = "2
이전과 비슷하게 BackTracking의 기초가 되는 문제다. 문제에는 중복이 되지 않는 배열인 nums 배열이 있는데, 요구사항은 모든 subset을 return하는 문제다. (=subarray) BackTracking 알고리즘이 작동하는 원리를 알고있다면 이해하기
BackTracking 알고리즘을 알기 전까지 오직 재귀함수로만 풀어보려고 했던 지난날.. (수많은 Runtime Error와 함께)BackTracking 알고리즘 관련 문제들을 연습중이다. 그 중 대표적인 '순열'을 구현할 수 있냐고 묻는 문제였다. 그럼 순열이 뭔지
backTracking을 통해 풀었다. 조합(Combination)이 순열(Permutation)과 다른 점은 unique해야 한다는 것인데, 이 말은 target=5라고 했을 때, \[1,2,2]와 \[2,1,2]는 다른 경우가 아니라 같은 경우라는 뜻이다. 조합은
기본 DP 문제로 볼 수 있다. DP 말고 다른 방법 중에 greedy..? swap? two pointers? 아직 내가 정확하게 이해를 하지 못한 방법이 하나 더 있는데 (더 간단하다) 그 방법은 아직 이해가 덜 됐기 때문에 여기서는 작성하지 않았다.문제 요구사항을
트리 탐색 문제의 기본이 되는 문제라고 한다. 문제의 요구사항은 아래 그림처럼 탐색한 노드의 value값의 합이 targetSum과 일치하는 배열을 담아서 return하라는 문제다. 이 문제는 먼저 트리 탐색에 대한 이해가 있어야 한다. 루트 노드부터 탐색을 시작하는