목록전체 글 (106)
오예 !!!
정렬 알고리즘 개요 데이터를 특정한 기준에 따라서 순서대로 나열하는 것 오름차순이나 내림차순 정렬 정렬 알고리즘을 이용하여 데이터를 정렬한 후 이진 탐색 적용 가능 대표적으로 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬이 있음 알고리즘의 효율성 고려 필요 - 상황에 적절하지 못한 정렬 알고리즘 사용 시 시간이 많이 소요되니 주의 (1) 선택 정렬 아직 정렬되지 않은 범위에 대해서 가장 작은 데이터를 선정해 맨 앞 데이터와 바꾸는 과정을 반복하는 알고리즘 매번 가장 작은 데이터를 선택 과정 예시: [3, 4, 2, 1, 0] 이라고 할때 0 ~ 4번 인덱스 중 가장 작은 데이터 0과 맨 앞 데이터 3 스왑 ➡️ [0, 4, 2, 1, 3] 1 ~ 4번 인덱스 중 가장 작은 데이터 1과 해당 범위의 맨 앞..
이코테 p.152 실전문제 - 미로 탈출 ((0, 0)부터 (n - 1, m - 1)까지의 최단 경로) 최단거리 구하기 ➡️ BFS 경우의수 구하기 ➡️ DFS 입력 예시 5 6 101010 111111 000001 111111 111111 출력 예시 10 교재 소스코드 (0, 0)에서 (n - 1, m - 1)까지의 최단 거리니까 BFS 사용 (0, 0)에서 해당 노드까지의 거리를 graph[x][y]에 저장 현재 노드의 값을 (바로 전 노드의 값 + 1)로 계속해서 업데이트 최종적으로 graph[n - 1][m - 1]에는 (0, 0)에서부터의 최단거리가 저장됨 from collections import deque # 입력 받기 n, m = map(int, input().split()) graph =..
이코테 p.149 실전문제 - 음료수 얼려 먹기 입력 15 14 00000111100000 11111101111110 11011101101110 11011101100000 11011111111111 11011111111100 11000000011111 01111111111111 00000000011111 01111111111000 00011111111000 00000001111000 11111111110011 11100011111111 11100011111111 출력 8 교재 소스코드 DFS 이용 입력으로 주어진 2차원 리스트를 그래프로 모델링한 후, '0'인 값이 상하좌우로 연결되어 있는 노드 묶음의 개수를 찾으면 됨 알고리즘 특정한 지점의 주변 상하좌우를 살펴본 뒤, 주변 지점 중에서 값이 '0'이면..
DFS 깊이 우선 탐색 알고리즘 특정한 경로로 탐색하다가 특정한 상황에서 최대한 깊숙이 들어가서 노드를 방문한 후, 다시 돌아가 다른 경로로 탐색하는 알고리즘 스택 자료구조 이용 스택을 쓰지 않아도 되며, 탐색 수행 시 데이터 개수가 N개라면 O(N) 시간 소요 재귀함수를 이용했을 때 매우 간결하게 구현 가능 동작 과정 탐색 시작 노드를 스택에 삽입하고 방문 처리 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리. 방문하지 않은 노드가 없으면 스택에서 최상단 노드를 꺼냄. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복 예시 인접한 노드 중 방문하지 않은 노드가 여러 개 있으면 일반적으로 번호가 낮은 순서부터 처리 소스코드 # DFS 메서드 정의 def d..
1. 스택 LIFO (Last In First Out) 구조: 나중에 넣은 게 가장 먼저 나옴 (ex. 박스 쌓기) 기본 리스트에서 append()와 pop() 메서드를 이용하여 스택 자료구조 구현 가능 append() - 리스트의 가장 뒤쪽에 데이터 삽입 pop() - 리스트이 가장 뒤쪽에서 데이터를 꺼냄 stack = [] stack.append(5) stack.append(2) stack.append(3) stack.append(7) stack.pop() stack.append(1) stack.append(4) stack.pop() print(stack) # 최하단 원소부터 출력 print(stack[::-1]) # 최상단 원소부터 출력 # 실행결과: # [5, 2, 3, 1] # [1, 3, 2,..
이코테 p.118 실전 문제 - 게임 개발 내 소스 코드 # 입력 받기 N, M = map(int, input().split()) A, B, d = map(int, input().split()) map_data = [] for i in range(N): line_data = list(map(int, input().split())) map_data.append(line_data) directions = [0, 1, 2, 3] dx = [0, 1, 0, -1] dy = [-1, 0, 1, 0] result = 1 # 가본 칸 수 left_cnt = 0 # 왼쪽으로 회전한 횟수 while True: # 현재 방향 기준으로 왼쪽 방향 확인 left = directions[d - 1] nx = A + dx[lef..
이코테 p.115 실전 문제 - 왕실의 나이트 내 소스코드 상하좌우 각각에 대하여 2칸 이동할 수 있는지 확인 상하로 이동했다면 좌우로 1칸 이동할 수 있는지 확인 좌우로 이동했다면 상하로 1칸 이동할 수 있는지 확인 data = input() row = data[:1] # 알파벳 col = int(data[1:]) # 숫자 result = 0 if 3
구현 알고리즘은 쉽게 떠오르는데, 막상 코드로 작성하기 까다로운 문제 유형 시뮬레이션, 완전 탐색 등 문법만 잘 숙지한다면 난이도가 낮은 편 이코테 p.110 예제 4-1 상하좌우 내 소스코드 R, L, U, D에 따라서 행, 렬 좌표를 +1 혹은 -1 하는 방식으로 소스코드를 작성함. 만약 N x N 범위를 벗어날 경우 이동이 무시되도록 함. N = int(input()) data = list(input().split()) col = 1 row = 1 # R은 row + 1 # L은 row - 1 # U은 col - 1 # D은 col + 1 for i in range(len(data)): if data[i] == 'R' and (row + 1) = 1: row -= 1 elif data[i] == '..