목록전체 글 (102)
컴공생 누르지 마세요! 컴공생 울어요.
라이브러리 공통으로 사용될 수 있는 특정한 기능들을 모듈화한 것 폴더명, 파일명 등에 대한 규칙이 없고 프레임워크보다 자유로움 ex) '도구'인 '가위'를 이용해서 '내가' 직접 컨트롤 프레임워크 공통으로 사용될 수 있는 특정한 기능들을 모듈화한 것 폴더명, 파일명 등에 대한 규칙이 있으며 라이브러리에 비해 엄격함 ex) '도구'인 '비행기'를 타고 이동하지만 '비행기'가 컨트롤하고 나는 가만이 앉아 있음 디자인 패턴 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약' 형태로 만들어 놓은 것
이코테 p.178 실전문제 - 위에서 아래로 첫째 줄에 수열에 속해 있는 수의 개수 N이 주어진다. (1
파이썬의 정렬 라이브러리 정렬 알고리즘 문제를 풀 때, 정렬 알고리즘을 직접 작성하는 것보다 미리 만들어진 라이브러리를 이용하는 것이 효과적인 경우가 많음 sorted() 함수 파이썬의 기본 정렬 라이브러리에서 제공 병합 정렬 기반 퀵 정렬보다 느리지만, 최악의 경우에도 O(NlogN) 시간 복잡도 보장 리스트, 딕셔너리 자료형 등을 입력받아서 정렬된 결과를 출력 이때, 반환되는 결과는 무조건 리스트 자료형 소스코드 array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] result = sorted(array) print(result) # 실행 결과 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] sort() 함수 리스트 객체의 내장 함수 리스트 변수가 하나 있을 때 내부 원소를..

(1) 퀵 정렬 기준을 설정한 다음, 큰 수와 작은 수를 교환한 후 리스트를 반으로 나누는 방식으로 동작 '피벗 pivot' 사용 큰 숫자와 작은 숫자를 교환할 때, 교환하기 위한 기준 퀵 정렬 수행 전, 피벗을 어떻게 설정할 것인지 미리 명시 필요 대표적인 분할 방식으로 호어 분할 방식이 있음 호어 분할 방식 리스트의 첫 번째 데이터를 피벗으로 정함 동작과정 특정한 리스트에서 피벗을 설정한 뒤, 왼쪽에서부터 피벗보다 큰 데이터를 찾고, 오른쪽에서부터 피벗보다 작은 데이터를 찾음. 그 후, 큰 데이터와 작은 데이터를 스왑. 이 과정을 반복하면 피벗에 대하여 정렬이 수행됨. 다시 피벗을 기준으로 왼쪽 리스트와 오른쪽 리스트에 각각 정렬 수행. 동작과정 예시: [5, 7, 9, 0, 3, 1, 6, 2, 4..
정렬 알고리즘 개요 데이터를 특정한 기준에 따라서 순서대로 나열하는 것 오름차순이나 내림차순 정렬 정렬 알고리즘을 이용하여 데이터를 정렬한 후 이진 탐색 적용 가능 대표적으로 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬이 있음 알고리즘의 효율성 고려 필요 - 상황에 적절하지 못한 정렬 알고리즘 사용 시 시간이 많이 소요되니 주의 (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..