모르지 않다는 것은 아는것과 다르다.

알고리즘 16

백준 2533번

접근 방식(알고리즘 분류) DFS + DP 내 풀이 import sys #재귀할때 이거 안해주면 가끔 런타임나옴 sys.setrecursionlimit(10**9) input = sys.stdin.readline N = int(input()) Tree = [[] for _ in range(N+1)] visited = [True for _ in range(N+1)] for _ in range(N-1): u, v = map(int, input().split()) Tree[u].append(v) Tree[v].append(u) #[1,0]으로 초기화 해주는 이유는 현재 dp에 저장할 값은 얼리 어답터가 아닌 노드의 수를 구하는 것이기 때문이다. DP = [[1,0] for _ in range(N+1)] def..

알고리즘 2022.02.26

백준 1786번

접근 방식(알고리즘 분류) KMP 내 풀이 # 일치하는 부분 문자열의 최대 길이를 기록하는 테이블 생성 def make_table(s): table = [0 for _ in range(len(s))] j = 0 for i in range(1, len(s)): #같을때까지 j를 뒤로 건너뛰면서 후퇴 while j > 0 and s[j] != s[i]: j = table[j-1] #같아집면 table에 j+1값을 대입 --> i, j 둘다 1씩 증가 if s[j] == s[i]: table[i] = j + 1 j += 1 return table def KMP(origin, pattern): result = [] table = make_table(pattern) j = 0 for i in range(len(o..

알고리즘 2022.02.26

백준 1701번

접근 방식(알고리즘 분류) KMP 내 풀이 # 일치하는 부분 문자열의 최대 길이를 기록하는 테이블 생성 def make_table(s): table = [0 for _ in range(len(s))] j = 0 for i in range(1, len(s)): #같을때까지 j를 뒤로 건너뛰면서 후퇴 while j > 0 and s[j] != s[i]: j = table[j-1] #같아집면 table에 j+1값을 대입 --> i, j 둘다 1씩 증가 if s[j] == s[i]: table[i] = j + 1 j += 1 return max(table) s = input() result = 0 for i in range(len(s)): result = max(result, make_table(s[i:len(..

알고리즘 2022.02.26

백준 1184번

백준 1184번 접근 방식(알고리즘 분류) DP + Indexing 내 풀이 #한쪽 대각선만 생각했음 n = int(input()) arr = [] for _ in range(n): arr.append(list(map(int, input().split()))) def arrSumRight(arr, a, b): sArr = [[0 for _ in range(n-b)] for _ in range(n-a)] aArr = [[0 for _ in range(n-b)] for _ in range(a)] sArr[0][0] = arr[a][b] aArr[a-1][0] = arr[a-1][b] resultS = [arr[a][b]] resultA = [arr[a-1][b]] # 교차점 기준 오른쪽 아래 for i in..

알고리즘 2022.02.26