본문 바로가기
  • 살짝 구운 김 유나

Algorithm64

DFS , BFS 미로찾기 알고리즘 미로찾기 예제) 아래 그림과 같은 미로가 있다. 16*16 행렬의 형태로 만들어진 미로에서 흰색 바탕은 길, 노란색 바탕은 벽을 나타낸다. 가장 좌상단에 있는 칸을 (0, 0)의 기준으로 하여, 가로방향을 x 방향, 세로방향을 y 방향이라고 할 때, 미로의 시작점은 (1, 1)이고 도착점은 (13, 13)이다. 주어진 미로의 출발점으로부터 도착지점까지 갈 수 있는 길이 있는지 판단하는 프로그램을 작성하라. 아래 예시는 도착 가능한 경우 [입력] 각 테스트 케이스의 첫 번째 줄에는 테스트 케이스의 번호가 주어지며, 바로 다음 줄에 테스트 케이스가 주어진다. 총 10개의 테스트케이스가 주어진다. 테스트 케이스에서 1은 벽을 나타내며 0은 길, 2는 출발점, 3은 도착점을 나타낸다. [출력].. 2022. 8. 25.
Queue Queue : 스택과 마찬가지로 삽입과 삭제의 위치가 제한적인 자료구조. 큐에 삽입한 순서대로 원소가 저장되어, 가장 먼저 삽입된 원소는 가장 먼저 삭제된다 .(FIFO) 큐의 주요 연산 연산 기능 enQueue(item) 큐의 뒤쪽(rear 다음)에 원소를 삽입하는 연산 deQueue() 큐의 앞쪽(front)에서 원소를 삭제하고 반환하는 연산 createQueue() 공백 상태의 큐를 생성하는 연산 isEmpty() 큐가 공백상태인지를 확인하는 연산 isFull() 큐가 포화상태인지를 확인하는 연산 Qpeek() 큐의 앞쪽에서 원소를 삭제 없이 반환하는 연산 선형 큐의 구현 # 삽입 ''' - 마지막 원소 뒤에 새로운 원소를 삽입하기 위해 1) rear 값을 하나 증가시켜 새로운 원소를 삽입할 자리를.. 2022. 8. 24.
2차원 배열 2차원 배열의 선언 : Python에서는 데이터 초기화를 통해 변수선언과 초기화가 가능 arr = [i for i in range(2, 9) if i % 2 == 0] # [2, 4, 6, 8 ] brr = [[1,2,3]] * 3 # [[1, 2, 3],[1, 2, 3],[1, 2, 3]] crr = [[i, j] for i in range(3) for j in range(2)] # [[0, 0],[0, 1],[1, 0],[1, 1],[2, 0],[2, 1]] 델타를 이용한 2차 배열 탐색 : 특정 원소의 상하좌우에 접근 -> 존재하지 않을 경우가 있으므로 index 체크 # 상하좌우 dy = [0, 0, -1, 1] dx = [-1, 1, 0, 0] 전치행렬 arr = [[1, 2, 3],[4, 5,.. 2022. 8. 23.
1차원 배열 버블 정렬 : 첫 번째 원소부터 인접한 원소끼리 계속 자리를 교환하면서 맨 마지막 자리까지 이동 def bubbleSort(): for i in range(N-1, 0, -1): for j in range(i): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr arr = [0, 4, 6, 1, 3, 2, 5] N = len(arr) 카운팅 정렬 : 항목들의 순서를 결정하기 위해 각 집합에 각 항목이 몇 개씩 있는지 세는 작업을 하여 선형시간에 정렬하는 효율적인 알고리즘 1. 데이터에서 각 항목들의 발생 회수를 세고, 정수 항목들로 직접 인덱스 되는 카운트 배열에 저장 2. 카운트 배열의 누적합 구하기 3. 뒤에서부터 해당 인덱스의.. 2022. 8. 23.