알고리즘 (17) 썸네일형 리스트형 백준 24479 시간초과 해결 (DFS) import sys sys.setrecursionlimit(10 ** 6) input = sys.stdin.readline def dfs(graph, v, visited): global cnt visited[v] = cnt for i in sorted(graph[v]): if visited[i] == 0: cnt += 1 dfs(graph, i, visited) n, m, r = map(int, input().split()) graph = [[] for _ in range(n + 1)] visited = [0] * (n + 1) cnt = 1 for _ in range(m): u, v = map(int, input().split()) graph[u].append(v) graph[v].append(u) d.. 백준 11725 트리의 부모 찾기 import sys sys.setrecursionlimit(10**6) input = sys.stdin.readline n = int(input()) graph = [[] for _ in range(n + 1)] for _ in range(n - 1): a, b = map(int, input().split()) graph[a].append(b) graph[b].append(a) visited = [0] * (n + 1) #부모 노드를 담을 리스트 def dfs(root): for i in graph[root]: if visited[i] == 0: visited[i] = root dfs(i) dfs(1) for i in range(2, n + 1): print(visited[i]) 백준 16953 (bfs) from collections import deque a, b = map(int, input().split()) q = deque([(a, 1)]) while q: now, cnt = q.popleft() if now == b: print(cnt) break if now * 2 b로 풀어가면 된다. 큐에 a값과 연산횟수값(처음1)을 넣어주고 시작한다. popleft()로 큐의 값이 있을 때 빼주어 현재값을 now에, 연산횟수를 cnt에 저장한다. now값과 b값을 비교하며 b값과 같으면 바로 연산횟수cnt를 출력하고 종료. 아니면, now값에 2를 곱한 값 또는 뒤에 1을 붙인 값(now * 10 + 1)이 b와 같거나 작을 때 큐에 넣어준다. (cnt값 + 1) 그렇게 now값이 b값과 같아질 때까지 .. [프로그래머스] 달리기 경주 - dict() (Python) *내가 작성한 코드 def solution(today, terms, privacies): answer = [] today_year = int(today[:4]) today_month = int(today[5:7]) today_day = int(today[-2:]) term_x = [] for i in range(len(terms)): term_x.append(terms[i].split()) privacie_x = [] for i in range(len(privacies)): privacie_x.append(privacies[i].split()) for index, i in enumerate(privacie_x): m = 0 privacies_year = 0 privacies_month = 0 privac.. 백준11724 *bfs풀이 from collections import deque def bfs(graph, start, visited): q = deque([start]) visited[start] = True while q: v = q.popleft() for i in graph[v]: if not visited[i]: visited[i] = True q.append(i) n, m = map(int, input().split()) graph = [[] for _ in range(n + 1)] visited = [False] * (n + 1) cnt = 0 for _ in range(m): u, v = map(int, input().split()) graph[u].append(v) graph[v].append(u) f.. [BFS&DFS기본] 백준1260번 (Python) *DFS(깊이 우선 탐색) #BFS(너비 우선 탐색) 백준 1260. [DFS와 BFS]문제 *DFS: 인접한 노드 중 시작점 V부터 숫자가 작은 노드부터 방문하고, 이미 방문했다면 다시 돌아가 인접 노드를 찾는다. *BFS: 1) 1번 노드 방문 후 큐에 삽입 2) 가장 앞에 있는 노드1을 pop 후, 인접 노드 2,3,4를 한꺼번에 q에 append 3) 가장 앞에 있는 노드2를 pop 후, 인접 노드 모두 방문처리 했으므로 append하지 않음 4) 가장 앞에 있는 노드3를 pop 후, 인접 노드 모두 방문처리 했으므로 append하지 않음 5) 가장 앞에 있는 노드4를 pop 후, 인접 노드 모두 방문처리 했으므로 append하지 않음 6) q는 공백이 되고 종료. from collections .. 특정 키를 기준으로 배열 오름차순 정렬하기(lambda) - python 문제: 프로그래머스 PCCE기출문제 10번 데이터 분석 def solution(data, ext, val_ext, sort_by): answer = [[]] a = [] sort = ["code", "date", "maximum", "remain"] for i in range(len(data)): for index, c in enumerate(sort): if ext == c: if data[i][index] 배열.. 파이썬 enumerate() 내장함수 사용 *처음 enumerate() 함수 쓰지 않고 푼 내 코드 def solution(board, moves): answer = 0 bag = [] for i in moves: for j in range(len(board)): if board[j][i-1] != 0: if bag and bag[-1] == board[j][i-1]: del bag[-1] answer += 2 else: bag.append(board[j][i-1]) board[j][i-1] = 0 break return answer * enumerate() 함수 사용한 코드 def solution(board, moves): answer = 0 bag = [] for i in moves: for index, j in enumerate(board).. 이전 1 2 3 다음