본문 바로가기
반응형

Algorithm44

Pancake Sorting n = [56,324,23,24,54,83,34] def filp(array, count=0): #배열의 길이 l = len(array) #배열의 길이와 count의 횟수가 같아진다면, 종료 if count == l: return array #배열의 0~(l-count)까지의 최대값 maxi = max(array[:l-count]) #최대값의 배열에서의 위치. index = array.index(maxi) #찾은 maxi를 배열의 첫번째로 위치하게 하고, array = array[0:index+1][::-1] + array[index+1:] #그리고 찾은 maxi가 l-count의 위치로 전체 배열을 역전한다. array = list(reversed(array[0:l-count])) + array[l-c.. 2024. 3. 30.
배열의 원소의 총합 계산하기 n = [13,6,9,8,12] def total(array, sum=0): #array의 비교할 것이 남아있지 않다면, if not array: #sum을 넘기면서 프로그램을 종료한다. return sum #sum에 첫번째 원소를 더한다. sum += array[0] #이미 더한 원소를 빼기위해서 0번째 원소를 뺀 배열과 더해져있는 sum을 리턴한다. return total(array[1:], sum) print(total(n))해당 함수의 시간복잡도는 배열의 길이의 비례만큼 실행되기 때문에 시간복잡도는 $O(n)$이다. n = [13,6,9,8,12] def min(array, com): #array의 비교할 것이 남아있지 않다면, if not array: #com을 넘기면서 프로그램을 종료한다. r.. 2024. 3. 30.
알고리즘 가이드 도움이 될 링크들 백준 온라인 저지 - https://www.acmicpc.net 백준 온라인 저지 슬랙 - https://www.acmicpc.net/slack 백준 문제 난이도 보여주는 서비스 - https://solved.ac 알고리즘 랭겜 코드포스 - https://codeforces.com (그린 민트 블루 퍼플 오렌지 레드 누텔라 등은 코드포스 레이팅을 의미합니다) 라이님의 알고리즘 강좌 - https://kks227.blog.me/220769859177 BaaaaaaaarkingDog님의 강좌 - https://blog.encrypted.gg/category/강좌 Lawali님의 강좌 - https://blog.naver.com/PostList.nhn?blogId=ingu9981&catego.. 2023. 8. 7.
배열에서 최솟값 찾기 n = [13,6,9,8,12] def min(array, com): # array의 비교할 것이 남아있지 않다면, if not array: # com을 넘기면서 프로그램을 종료한다. return com # 배열의 첫번째를 now로 선언. now = array[0] # now가 com보다 작다면, if now < com: # 배열의 첫번째수가 비교하는 수보다 작으면, now를 com로 대체한다. return min(array[1:], now) # now가 com보다 작지 않다면, else: # 배열의 첫번째가 비교하는 수보다 작지 않다면, com을 유지한다. return min(array[1:], com) print(min(n, n[0])) 해당 함수의 시간복잡도는 배열의 길이의 비례만큼 실행되기 때문에.. 2023. 8. 7.
Chapter 12. 백트래킹 백트래킹 (핵심 유형 문제풀이) 혼자 힘으로 풀어 보기 N-Queen: https://www.acmicpc.net/problem/9663 문제 제목: N-Queen 문제 난이도: 중(Medium) 문제 유형: 백트래킹 추천 풀이 시간: 40분 문제 풀이 핵심 아이디어 N x N 크기의 체스 보드 위에 퀸(Queen) N개를 서로 공격할 수 없게 배치시켜야 합니다. 대표적인 백트래킹(Backtracking) 문제입니다. N = 4일 때는, 다음과 같은 경우가 존재합니다. DFS를 이용하여 간단히 백트래킹 알고리즘을 구현할 수 있습니다. 각 행을 차례대로 확인하면서, 각 열에 퀸(Queen)을 놓는 경우를 고려합니다. 각 행을 차례대로 확인하면서, 각 열에 퀸(Queen)을 놓는 경우를 고려합니다. 이 때 .. 2020. 8. 10.
Chapter 11. 탐욕 알고리즘 탐욕 알고리즘 (기초 문제풀이) 혼자 힘으로 풀어 보기 거스름돈: https://www.acmicpc.net/problem/5585 문제 제목 : 거스름돈 문제 난이도: 하(Easy) 문제 유형: 그리디 추천 풀이 시간: 10분 문제 풀이 핵심 아이디어 거스름돈의 최소 개수를 계산해야 합니다. 가장 기초적인 탐욕 알고리즘 문제 유형입니다. 단순히 '큰 화폐 단위' 순서대로 잔돈을 거슬러 주면 최적의 해를 얻을 수 있습니다. '큰 화폐 단위' 순서대로 잔돈을 거슬러 줍니다. 거슬러 줄 돈: 620 거스름 돈의 개수: 0 거슬러 줄 돈: 120 거스름 돈의 개수: 1 거슬러 줄 돈: 20 거스름 돈의 개수: 2 거슬러 줄 돈: 20 거스름 돈의 개수: 2 거슬러 줄 돈: 0 거스.. 2020. 8. 10.
Chapter 10. 그래프 고급 탐색 알고리즘 그래프 고급 탐색 알고리즘 (핵심 유형 문제풀이) 혼자 힘으로 풀어 보기 해킹: https://www.acmicpc.net/problem/10282 문제 제목: 해킹 문제 난이도: 중(Medium) 문제 유형: 다익스트라 최단 경로 추천 풀이 시간: 50분 문제 풀이 핵심 아이디어 기본적인 다익스트라 최단 경로 알고리즘 문제입니다. 도달할 수 있는 정점들의 개수와 최대 거리를 출력합니다. 정점의 개수 N이 최대 10,000이고, 간선의 개수 D는 최대 100,000입니다. 우선 순위 큐를 이용하여, 시간 복잡도 O(NlogD)로 해결할 수 있습니다. 정점개수 = 3, 간선 개수 = 3, 시작 정점 번호 = 1 소스코드 import heapq import sys input = sys.stdin.readli.. 2020. 8. 10.
Chapter 09. 그래프 기본 탐색 알고리즘 그래프 기본 탐색 알고리즘 (기초 문제풀이) 혼자 힘으로 풀어 보기 DFS와 BFS: https://www.acmicpc.net/problem/1260 문제 제목: DFS와 BFS 문제 난이도: 하(Easy) 문제 유형: DFS, BFS 추천 풀이 시간: 30분 문제 풀이 핵심 아이디어 기본적인 형태의 그래프를 단순히 DFS와 BFS로 탐색합니다. 이 문제에서는 "정점 번호가 작은 것"을 먼저 방문해야 합니다. 모든 노드와 간선을 차례대로 조회하여 O(N+M)의 시간 복잡도로 문제를 해결해야 합니다. 국내 코딩 테스트 합격을 위해서는 이 문제를 매우 빠르게 풀 수 있도록 숙달할 필요가 있습니다. 큐(Queue) 구현을 위해 collections 라이브러리의 deque를 사용합니다. 예시) 정점 개수 = .. 2020. 8. 10.
Chapter 08. 동적 프로그래밍 동적 프로그래밍 (기초 문제 풀이) 혼자 힘으로 풀어 보기 01타일: https://www.acmicpc.net/problem/1904 문제 제목: 01타일 문제 난이도: 하(Easy) 문제 유형: 동적 프로그래밍 추천 풀이 시간: 20분 문제 풀이 핵심 아이디어 사용할 수 있는 타일의 종류는 2개입니다. 두 가지 종류의 타일을 이용하여, N 길이의 수열을 만드는 모든 경우의 수를 구해야 합니다. 가장 전형적인 동적 프로그래밍 문제입니다. N이 최대 1,000,000이므로 시간 복잡도 O(N)으로 해결해야 합니다. 타일을 왼쪽에서부터 오른쪽으로 이어서 붙인다고 가정합니다. 예를 들어 N = 3일때, 경우의 수는 3가지입니다. 예를 들어 N=4일 때, 경우의 수는 5가지 입니다. 동적 프로그래밍 문제를 풀.. 2020. 8. 10.
Chapter 07. 고급 탐색 알고리즘 고급 탐색 알고리즘 (기초 문제 풀이) 혼자 힘으로 풀어 보기 트리 순회: https://www.acmicpc.net/problem/1991 문제 제목: 트리 순회 문제 난이도: 하(Easy) 문제 유형: 트리, 구현 추천 풀이 시간: 20분 문제 풀이 핵심 아이디어 전위 순회: 루트 -> 왼쪽자식 -> 오른쪽 자식 중위 순회: 왼쪽 자식 -> 루트 -> 오른쪽 자식 후위 순회: 왼쪽 자식 -> 오른쪽 자식 -> 루트 소스 코드 class Node: def __init__(self, data, left_node, right_node): self.data = data self.left_node = left_node self.right_node = right_node def pre_order(node): p.. 2020. 8. 10.
728x90
반응형