목록ALGORITHM (82)
정구리의 우주정복
DFS를 이용한 풀이 graph에 각 노드의 간선에 대한 노드들을 넣어주고 전체 visit의 값에 True 를 넣고 한번 방문한 적이 있으면 False를 넣어준다 그리고 간선에 대한 노드가 True 값이면 다시 함수를 호출해 False 로 바꿔준다 맨 마지막에 도착노드값이 True(방문한 적이 없음) 면 result =0 으로 해주고 그 밖에는 result = 1 def dfs(s): visit[s] = False for i in graph[s]: if visit[i] == True: dfs(i) testCase = int(input()) for i in range(testCase): v,e = map(int,input().split()) graph = [[] for _ in range(v+1)] vis..
testCase = int(input()) for i in range(testCase): string = input() stack = [] check = [] for j in string: if j == '{' or j == '(': #열린 괄호라면 input stack.append(j) elif len(stack) == 0 and j=='}' or len(stack) == 0 and j==')': #스택안에 아무것도 없는데 만났을때 check.append(0) #check 에 append 이후 break break elif len(stack)>0: if j == '}': if stack[-1] == '{': stack.pop(-1) else: check.append(0) break elif j == '..
#정답은 여러가지일 수 있음 ##파이썬으로 풀었다 ### 질문 댓글 ####문제는 따로 쓰지않음 피보나치 수란 ??? 0과 1로 시작을 해 0번째 피보나치 수는 0이고 1번쨰는 1이다 그 다음부터는 바로 앞의 두 피보나치 수의 합이 된다 0,1,2,3,5,8,13 . . . 이런식으로 증가해 나간다 2748- 피보나치 수 2 피보나치 수열 def dp(n): for i in range(2,n+1): arr.append(arr[i-1]+arr[i-2]) return(arr[n]) n=int(input()) arr=[0,1] print(dp(n)) 점화식은 arr[i] = arr[i-1]+arr[i-2] 가 된다 이때 단순재귀를 이용하면 함수 호출개수가 너무 많아지기 때문에 for문을 이용하자 1003- 피..
#파이썬 ##이문제는 아직 이해가 안돼서 질문 안받음 문제를 보자마자 ?? 해서 열심히 찾아봤더니 DP(동적계획법) 의 Hello World 와 같은 문제라고 한다 강의를 듣자마자 바로 풀수 있었을 문제는 아닌것같고 .. 아무튼 유투부 보면서 보고 써본수준 (풀었다고 하기도 민망) youtu.be/YHZiWaL49HY 이 영상 봤다 DP 나 DFS 를 풀기위해선 점화식이 필요하다 점화식이란 ? 규칙성 이라고 생각하면 될듯 그리고 보통 점화식은 제일 마지막 연산을 생각해보면 된다고 한다 이 문제의 규칙성은 이렇게 된다고 한다 (이걸 사람들은 어떻게 알았을까) 최종 소스는 이렇게 된다 def dp(n): if n == 1: #1인경우의 개수는 1개 return 1 elif n == 2: #2인 경우의 개수는..
#파이썬으로 품 ##질문 댓글 딕셔너리 이용해서 푸니까 쉬웠다 testCase = int(input()) for i in range(testCase): str1=str(input()) str2=str(input()) dict = {} for j in str1: #모든게 0 인 딕셔너리 생성 dict[j] = 0 for j in str2: if j in dict: dict[j] +=1 print('#'+str(i+1)+' '+str(max(dict.values())))
#파이썬으로 품 ##질문은 댓글 가로 세로를 받아와서 역순과 같은게 있는지 없는지 탐색했다 testCase = int(input()) for i in range(testCase): n,m = map(int,input().split(' ')) arr = [] for j in range(n): arr.append(list(input())) for j in range(n): for k in range(n-m+1): ga_arr = arr[j][k:k+m] #가로 se_arr = [arr[x][j] for x in range(k,(k+m))] if ga_arr == ga_arr[::-1] : hwe=ga_arr elif se_arr == se_arr[::-1]: hwe=se_arr print('#'+str(i+..
#파이썬으로 작성 ##질문은 댓글 브루트포스를 이용해서 풀었다 testCase = int(input()) def BruteForce(search,string): i = 0 #string 의 index j = 0 #search 의 index while i < n and j < m: if string[i] != search[j]: i = i-j j = -1 i = i+1 j = j+1 if j == m: return 1 else: return 0 for i in range(testCase): search = input() string = input() n =len(string) m = len(search) result = BruteForce(search,string) print('#'+str(i+1)+' '..
브루트포스란 ? 고지식한 패턴검색으로 본문의 처음부터 끝까지 차례대로 순회하면서 패턴 내의 문자들을 일일이 비교하는 방식 파이썬 코드 #고지식한 패턴 검색 (브루트 포스) #본문 처음부터 끝까지 차레대로 순회하면서 패턴내의 문자들을 일일이 비교하는 방식 arr = input() #처음 문자열 search = input() #찾을 문자열 n = len(arr) m = len(search) def BruteForce(search,arr): i =0 #arr의 인덱스 j =0 #search 의 인덱스 while j < m and i