전체 글225 다이나믹 프로그래밍 DP 다이나믹 프로그래밍 = 동적 계획법 = DP -메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법 -이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않도록 한다. -다이나믹 프로그래밍의 구현은 일반적으로 탑다운, 바텀업 방식으로 구성된다. (일반적인 프로그래밍에서의 동적: 프로그램이 실행되는 도중에 실행에 필요한 메모리를 할당). 여기서는 다른 의미로 쓰인다. 조건 1.최적 부분 구조 (optimal substructure) -큰 문제를 작은 문제로 나눌 수 있고, 작은 문제의 답이 모이면 큰 문제를 해결할 수있다. 2.중복되는 부분 문제(Overlapping subproblem) -동일한 작은 문제를 반복적으로 해결 예시 *점화식 : 인접한 항들 사이의 .. 2020. 11. 1. 백준 2178번 파이썬 | 미로탐색 (BFS 탐색문제) 문제 N×M크기의 배열로 표현되는 미로가 있다. 1 0 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 있다. 위의 예에서는 15칸을 지나야 (N, M)의 위치로 이동할 수 있다. 칸을 셀 때에는 시작 위치와 도착 위치도 포함한다. 입력 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력.. 2020. 10. 31. 백준 1697번 파이썬 | 숨바꼭질 (BFS 탐색문제) 문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오. 입력 첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다. 출력 수빈이가 동생을 찾는 가장 빠른 시간을 출력한다. 풀이 지금 BFS, DFS를 공부한지 얼마 안돼서 어떤걸로 풀어야 할.. 2020. 10. 31. 백준 2667번 파이썬 | 단지번호붙이기 (DFS 연결노선 찾기문제) 문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집들의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로그램을 작성하시오. 입력 첫 번째 줄에는 지도의 크기 N(정사각형이므로 가로와 세로의 크기는 같으며 5≤N≤25)이 입력되고, 그 다음 N줄에는 각각 N개의 자료(0혹은 1)가 입력된다. 출력 첫 번째 줄에는 총 단지수를 출력하시오. 그리고 각.. 2020. 10. 31. DFS, BFS 탐색이란 원하는 데이터를 찾는 과정이다. 코딩테스트에서 자주 나오는 단골문제이니 꼭 알아두도록 하자. 알아두면 좋은 개념: 재귀함수, 스택, 큐 DFS 깊이 우선 탐색으로 깊은 부분을 우선적으로 탐색하는 알고리즘 스탁, 재귀 함수 이용한다. 1. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 2. 스택의 최상단 노드에 망문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문 처리한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 3. 더 이상 2번 과정을 수행하지 못할때 까지 반복한다. def dfs(graph, v, visited): visited[v] = True print(v,end=' ') for i in graph[v]: if not visited[i.. 2020. 10. 30. 앱인벤터- 블루투스 채팅 앱 구현 이번 자료도 IT 교육 봉사 당시 진행했던 자료. 2020. 10. 30. 이전 1 ··· 16 17 18 19 20 21 22 ··· 38 다음