Algorithm (52) 썸네일형 리스트형 1260 DFS와 BFS / DFS, BFS 정답from collections import dequedef DFS(graph, start, visited, dfs_ans): visited[start] = True dfs_ans.append(start) for i in graph[start]: if visited[i] is False: DFS(graph, i, visited, dfs_ans)def BFS(graph, start, visited, bfs_ans): queue = deque() queue.append(start) visited[start] = True while queue: v = queue.popleft() bfs_ans.append(v) .. 11724 연결 요소의 개수 / DFS, BFS 인접리스트 만들기n, m = map(int, input().split()) # 정점, 간선의 개수con = []for i in range(m): a, b = map(int, input().split()) con.append((a,b))# 그래프 세팅, 이차원 리스트로 만들기graph = []for i in range(0, n + 1): graph.append([])for a, b in con: graph[a].append(b) graph[b].append(a) 정답def DFS(graph, start, visited): visited[start]= True # print(start, end=' ') for i in graph[start]: if vi.. DFS와 BFS 그래프그래프 : 복잡하게 연결된 자료 객체 사이의 관계를 효율적으로 표현한 것객체 : 정점관계 : 간선 (= 객체간의 관계)그래프 : 접점과 간선의 집합으로 구성됨 -> A와 B를 연결하는 간선 (A, B)인접 : 간선으로 연결된 두 정점을 인접해 있다고 함차수 : 정점에 연결된 간선의 수경로 : 간선을 따라 갈 수 있는 길을 순서대로 나열한 것연결그래프 : 모든 정점사이에 경로가 존재하는 그래프트리 : 사이클을 가지지 않는 연결 그래프 그래프의 표현 : 인접리스트를 이용한 표현인접리스트 : 각 정점이 인접한 정점 리스트를 갖도록 하는 것 -> [[], [2, 5], [1, 5, 4, 3], [4, 2], [3, 6, 5, 2], [2, 1, 4], [4]]그래프 순회 : 하나의 정점에서 시작하여 그래프.. 옹알이 (2) / 프로그래머스 첫 번째 시도옹알이를 한 단어를 split을 이용해서 또 리스트로 나누려고 함생각해보니 re.split()은 문자를 제거하고 남은 부분만 반환해서 결과가 이상함옹알이가 가능한 단어가 딱 한번만 수행할 수 있는 줄 알았음import rebabbling = ["aya", "yee", "u", "maa"]def solution(babbling): ans = 0 for i in babbling: s = re.split(r"[a,y,w,m]", i) dic = {"a": ["aya", False], "y": ["ye", False], "w": ["woo", False], "m": ["ma", False]} cnt = 0 for j in s: .. 로또의 최고 순위와 최저 순위 / 프로그래머스 정답def solution(lottos, win_nums): answer = [] min_match = 0 rank = {6:1, 5:2, 4:3, 3:4, 2:5, 1:6, 0:6} idx = 0 lottos.sort(reverse = True) win_nums.sort(reverse = True) for i in lottos: if i == 0: break for j in win_nums: if i == j: min_match = min_match + 1 idx = idx + 1 max_match = min_match + len(lottos) - i.. 기사단원의 무기 / 프로그래머스 첫 번째 시도시간초과로 실패!def solution(number, limit, power): ans = 0 for i in range(1, number + 1): cnt = 0 for j in range(1, i + 1): if cnt > limit: break if i % j == 0: cnt = cnt + 1 if cnt > limit: ans = ans + power else: ans = ans + cnt return ans 탐색 범위를 제곱근까지만 구하기약수는 짝이 맞춰서 있기 때문에 제.. 덧칠하기 / 프로그래머스 정답start + m - 1 을 하면 페인트를 칠할 수 있는 최대 범위의 수가 나옴칠해야 하는 다음 구역이 해당 최대 범위의 수에 포함된다면 넘어가고 그 수보다 크다면 페인트를 칠하는 횟수를 한번 증가시키고 해당 다음 구역부터 페인트칠 시작section[0]부터 시작하는 것이 핵심def solution(n, m, section): ans = 1 start = section[0] #페인트 칠하는 시작점 for i in range(1, len(section)): if start + m - 1 소수 만들기 / 프로그래머스 접근방법특정 길이의 리스트에서 3가지의 수를 뽑는 모든 경우의 수 구하기백트래킹첫 번째 숫자를 고정하고,두 번째 숫자를 첫 번째 숫자 이후의 값 중에서 선택,세 번째 숫자를 두 번째 숫자 이후의 값 중에서 선택하여,모든 경우의 수를 탐색하는 방식으로 구현소수를 구할 때는 범위를 √n까지만 확인하면 된다!def is_prime(n): if n 정답import itertoolsdef solution(nums): answer = 0 num = list(itertools.combinations(nums, 3)) for i in num: isPrime = 0 k = sum(i) for j in range(2, k): if k % j .. 이전 1 2 3 4 ··· 7 다음 목록 더보기