Most Common Word코테 언어를 C++에서 파이썬으로 바꿨는데 이런 문자열 조작은 확실히 파이썬이 좋은거 같다.우선 WA를 받았다.여전히 코드에 C++ 스타일이 가득한거 같다. 이 부분은 차차 바꿔가야지.먼저 문장을 공백으로 나누어 리스트로 나눈다.그 후 각
Group Anagrams우선 나는 제출을 못했다. 1시간 정도 순열을 이용해서 풀려고 고민을 했었는데 못풀었다.배열에서 문자를 하나씩 꺼내와 , 그 문자가 만들 수 있는 순열을 다 만든다. 이 문자가 입력 문자배열에 존재하면 새로운 리스트에 담고 , 입력 문자 배열에
Longest Palindromic Substring아 이것도 일단 못풀었다.아마 백준에서 C++코드로 작년 쯤 팰린드롬 시리즈를 푼 기억이 있다. 첫번째로 한 고민은재귀를 이용해서 바이너리 서치를 이용 할 수 있을까? 였다.0 ... len(s) 길이로 시작하여 le
Two Sum이런 말 하면 좀 그렇지만 가장 1번 문제고..틀릴일은 없겠다 싶어서 브루트 포스로 풀었다.시간 복잡도는 O(n^2)인데 그나마 최적화해보겠다고 노력은 했다.인덱스 (i,j)를 구할때 (i,j)나 (j,i)나 같으므로 안쪽 반복문은 인덱스 i 이후로 시작하
3Sum우선 시간초과를 받았다.백준에서 비슷한 부분수열의 합 시리즈랑 유사해서 브루트 포스로 풀면 되겠구나 싶어서 재귀로 코드를 짰는데 시간초과가 났다.threeSum 함수는 리트코드에서 기본 지정이기 때문에나는 recursive라는 함수를 만들었다.생각해보니 thre
Array Partition처음에는 O(n^2) 시간이 걸리는 반복문을 써서 브루트포스로 해봐야하나? 싶었는데 그것도 아니었다. 반복문으로 풀려면 최악의 상황에서 O(n^2)이상의 시간복잡도를 가지는 로직을 구현해야 할꺼같아서 생각의 방향성을 달리해 어떤 규칙이 있을것
Best Time to Buy and Sell Stock문제를 읽자마자 쉽네? 하고 어떻게 해야될지 생각해본 후 코드를 작성하고 제출했더니 시간초과였다.C++에서는 시간초과 안될것 같은 코드가 파이썬에서는 가볍게 시간초과되서... 가끔 황당하기도 하지만엄밀히 따지면 반
Palindrome Linked List파이썬 알고리즘 인터뷰에서 링크드 리스트 관련 문제라길래 링크드 리스트를 적극 활용하나? 아니면 이 자료구조를 써야하나 싶었는데그건 아니고 링크드 리스트가 어떻게 구현되어있는지에 대한 이해를 전제로 깔고 시작하는 문제이다.링크드
Merge Two Sorted Lists나의 논리결과 값으로 반환 할 빈 연결리스트 ret을 선언하고두 연결리스트 l1, l2를 서로 비교해가며 작은 원소순서대로 ret에 이어 붙이고 , 둘 중 하나가 끝에 다 달았을때, 어느 한 연결리스트의 순회를 마치지 못했다면 그
Reverse Linked List링크드 리스트에 대한 개념은 있었는데 이 개념을 어떻게 구현으로 옮길 줄 몰랐다. 이 부분은 부끄럽게 생각한다.재귀를 사용하여 이 문제를 풀려고 했다.Node.next가 None인게 마지막 노드이므로 이 노드를 첫 노드로 삼고 리턴하면
Number of islands논리적으론 맞는것 같은데..시간초과가 나서 계속 틀렸다.비슷한 문제를 백준에서 본적 이있는데, 아파트였나? 선거구였나? 이런걸 구하는 문제였다. 리트코드문제는 좀 더 쉬운것 같지만 접근하는 방법은 쉬운것 같다.2x2 형태의 맵을 다루는 문
리트코드 문제이 문제는 문제 풀이에 대한 반추보다는 다익스트라 알고리즘에 대한 반추를 하려고 한다.다익스트라 알고리즘은 그래프에서 시작점을 기준으로 최단거리를 찾는 알고리즘이다. 그래프의 가중치에 음수가 있으면 안된다.다익스트라 알고리즘은 시작점에 연결되어있는 노드들을
문제 링크트리의 최대 깊이를 찾는 문제이다. 따라서 어찌됬건 트리의 루트부터 트리의 리프노드까지 순회해야된다고 생각했고, 트리의 순회라면 전위순회,중위순회, 후위순회가 있다. 이 각각의 순회의 아이디어는 재귀이며 ,재귀로 아이디어를 구현 할 때에는 그저 재귀함수를 놓는
문제 링크우선 정답의 논리와는 똑같다. 다만 에러처리로 인해 코드가 복잡하며 여전히 C++ 스타일인것 같다. 처음에는 리스트의 중간값을 구한뒤 트리의 루트로 만든 후 리스트를 첫번째 원소부터 순회하며 그냥 루트에서부터 값을 BST방식으로 삽입하는 걸로 했다가 틀렸다.그
문제 링크지난번에 백준에서 푼 문제인데 정답을 보고 풀었던것 같다.역시나 이번에도 풀지 못했다. 그러나 문제 풀이에 핵심적인 아이디어는 떠올랐으니..발전하긴 하는것 같다.전위순회와 중위순회를 이용해서 트리를 만드는 문제다. 문제에서 전위순회 preorder = \[3,
이 문제는 힙 자료구조 바로 뒤에 나오는 문제여서 힙정렬을 이용해여 풀었더니 바로 풀려서..문제에 대한 정리보다 힙 자료구조에 대한 정리를 해야겠다.힙은 트리를 사용하는 자료구조써 힙 정렬을 위해 탄생 한 자료구조이나 힙 정렬뿐만 아니라 우선순위 큐, 다익스트라 알고리
문제 링크이 문제는 트라이 자료구조를 구현하는 문제이다.트라이는 트리 구조를 이용해서 문자열을 쉽게 탐색할 수 있도록 하는 자료구조이다. 한 노드에 한 문자씩 넣어서 트리를 만든다.파이썬에서는 딕셔너리로 간단하게 구현을 했다.
문제 링크문제에서 동일한 수는 2번 반복된다고 했으므로 리스트를 정렬해서 인접 한 수 끼리 xor연산을 한다. 인접한 두 수가 동일한 수라면 xor을 했을때 0이고 , xor했을때 0이 아니라면 인접 한 두수가 다르므로 둘 중 하나를 리턴한다.둘 중 하나를 고르는건 일
문제 링크이와 비슷한 그리디 알고리즘은 백준에서 많이 풀어봤는데 오랜만에 풀려고 하니까 또 못풀었다.너무 어렵게 생각했을까..? 최적부분구조와 탐욕적 선택 속성을 선택 해 봤다. 앞의 선택이 후의 선택에 영향을 미치지 않고, 현재의 상태에서 최적값을 구한 후 모아서 결
문제링크두 리스트의 원소들을 더하는 문제이다. 일단 연결 리스트의 값에 접근 해야되기 때문에 두 리스트를 순회해야한다고 생각했다. 리스트 순회는 head에서 시작하여 다음 노드 next가 None일때까지 순회하면 된다.문제에서 l1,l2 리스트의 길이가 다를 수 있기
https://leetcode.com/problems/task-scheduler/우선 구현을 못해서 풀지 못한 문제이고 나중에 힌트를 얻어서 풀긴했다. (https://withhamit.tistory.com/419 여기 참조)논리자체는 내가 생각했던거