목록algorithms (25)
yuns
문제 설명 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,000 이하인 자연수입니다. prices의 길이는 2 이상 100,000 이하입니다. 입출력 예 prices return [1, 2, 3, 2, 3] [4, 3, 1, 1, 0] 입출력 예 설명 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다. 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다. 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다. 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다. 5초 시점의 ₩3은..
아이스크림 n, m = map(int, input().split()) graph = [] for i in range(n): graph.append(list(map(int, input()))) def dfs(x, y): if x = n or y >= m or y = n or ny >= m: continue if graph[nx][ny] == 0: continue if graph[nx][ny] == 1: graph[nx][ny] = graph[x][y] + 1 queue.append((nx, ny)) return graph[n - 1][m - 1] print(bfs(0, 0))
DFS BFS 동작 원리 stack queue 구현 방법 재귀 함수 이용 큐 자료구조 이용
가까운 노드부터 탐색하는 알고리즘 알고리즘 동작 방식 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다. 큐에서 노드를 꺼내 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문처리를 한다. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다. from collections import deque def bfs(graph, start, visited): queue = deque([start]) visited[start] = True #queue가 빌 때까지 반복함을 의미 while queue: v = queue.popleft() print(v, end=' ') for i in graph[v]: if not visited[i]: queue.append(i) visited[i] =..
그래프 구조 - 노드(node, vertex)와 간선(edge)로 이루어짐 인접행렬 방식: 2차원 배열로 그래프의 연결 관계를 표현하는 방식 INF = 99999999 graph = [ [0, 7, 5], [7, 0, INF], [5, INF, 0] ] 인접리스트 방식: 연결리스트로 그래프의 연결 관계를 표현하는 방식 graph = [[] for _ in range(3)] #node k와 edge 크기 n으로 연결된 node d에 대하여: graph[k].append((d, n)) #노드 0에 연결된 노드들에 대한 정보 graph[0].append((1, 7)) graph[0].append((2, 5)) #노드 1에 연결된 노드들의 정보 graph[1].append((0, 7)) #노드 2에 연결된 노드..
탐색: 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 자료구조: 데이터를 표현하고 관리하고 처리하기 위한 구조 스택(Stack): FILO, LIFO 구조 append(), pop()메소드 사용 st = [] st.append(2) st.append(3) st.pop() 큐(Queue): FIFO구조 from collections import deque queue = deque() queue.append(5) quque.append(2) quque.popleft() #for printing queue.reverse() 재귀함수(Recursive Function): 자기 자신을 다시 호출하는 함수 함수로 정의하고 호출하는데 너무 많이 호출하게 될 경우 RecursionError 발생 재귀함수의 종료조..
n, k = map(int, input().split()) cnt = 0 res = 0 # n 이 k보다 큰 경우 while n >= k: #n이 k로 나누어 떨어지지 않을 경우 n -= 1 while n % k != 0: n -= 1 res += 1 n /= k res += 1 res += (n-1) print(res)