본문 바로가기

알고리즘19

알고리즘 관련 주워둔 즐겨찾기 모음 출처: Lanto 알고리즘 어떻게 돌아가는지 시각적으로 보여주는 사이트 (영어)https://visualgo.net/en 코딩 테스트 대비 문제집 with Baekjoon https://github.com/tony9402/baekjoon GitHub - tony9402/baekjoon: 코딩테스트 대비 문제집(Baekjoon Online Judge) 코딩테스트 대비 문제집(Baekjoon Online Judge). Contribute to tony9402/baekjoon development by creating an account on GitHub. github.com Neetcode 사이트와 유튜브 - Leetcode에서 뭘 풀어야할지 모를 때 순서대로 따라가면 좋다. https://neetcode... 2022. 7. 8.
가장 긴 펠린드롬 (구현 , 최적화(?)) 단순한 문제이지만 구현후 성능 문제가 있을 것이라 예상했고 dp등을 생각해보았지만 딱히 떠오지않아서 다른 사람들의 풀이를 참고했습니다. 구현 내용은 같으나 가장 긴 것부터 파악하도록 구현하면 2번도 통과가 가능합니다. 여기서 깨달은 것은 저도 가장 긴것부터 하면 된다는 것은 알았지만, 그러한 태도가 습관화되어있지는 않는 것같습니다. 문제에서 그런 사소한 점으로 정오답이 갈리게 해놨을까 이러한 생각을 무의식에 가지고 있기도 했던 것 같습니다. 쉬운 문제나 어려운 문제를 구분하지 않고 항상 최선의 코드를 짤 수 있는 사람이 되겠다는 생각이 들었습니다. def isPalindrome(s): ln = len(s) i = 0 j = ln-1 con = True while ilen(s): continue # pri.. 2021. 7. 7.
줄세우기 (위상정렬) 하나의 개념을 이해하는데서 그치는게 아니라 이를 활용하려면 여러 군데에 응용해서 활용해보는 것이 가장 효과적인 것 같습니다. 위상정렬 또한 개념을 이해했지만 구현하려고 하니 막히거나 다른 부분과 헷갈리는 부분이 있었고 복습 겸 간단히 풀어보았습니다. from collections import deque n , m = map(int,input().split()) q = deque() indegree = [0]*(n+1) board = [[] for _ in range(n+1)] # print(board) for i in range(m): a , b = map(int ,input().split()) indegree[b]+=1 board[a].append(b) for i in range(1,n+1): if i.. 2021. 7. 3.
KMP의 일부, computeLPS에 대해서 (KMP) 생각보다 굉장히 쉽다. kmp가 복잡하고 이름이 복잡해보여서 그렇지 기본 틀은 간단하다. lps는 s라는 문자열이 있을때 각 1개의 문자열에서 순서대로 len(s)까지의 길이를 지나는 동안 각 크기의 문자열에 대해 최대 있을 수 있는 가장 긴 prefix와 suffix가 겹치는 길이를 저장한다. 예를 들어 ABCA라는 문자열이 있으면 A, AB,ABC,ABCA라는 문자열을 도는 동안 leng은 0부터 시작해 최대 존재할 수 있을 만큼 길이의 포인터를 가리키게 되고 i는 문자열의 길이를 가리키게 되는 투포인터 방식으로 구하게된다. 즉 i가 1부터 시작해 len(s)보다 작은 동안, leng은 0에서 시작하게 되고(존재할 수 있는 겹치는 길이는 최소0이므로) 일치하면 leng를 증가시키고 lps[i]는 le.. 2021. 6. 19.