전체 글(34)
-
알고리즘) 1504 특정한 최단 경로
https://www.acmicpc.net/problem/1504 1504번: 특정한 최단 경로 첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존 www.acmicpc.net (1) 문제 이해하기 (2) 머리로 풀어보기 (3) 일반화 (4) 그럼 노드간 최단거리는 무엇으로 구하는가? 가장 대중적이고 보편적인 최단경로 알고리즘 데이크스트라(다익스트라) 시작 노드 = 0 (자기 자신으로 오는 경로) 매번 경로에 대해 가장 작은 값을 알아야 하기 때문에 min_heap을 통한 자료구조가 적절하다. import sys from h..
2022.08.21 -
알고리즘) Baekjoon 1931 회의실 배정.
https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 문제 어떻게 풀어야할까...? 1. 시간을 알차게 써야한다. = 낭비 되는 시간이 없어야 한다. 2. 회의시간이 가장 짧은녀석은 무조건 들어가지 않을까? ㄴ 2-1. 동일한 애들이 있으면 ? 0시와 시작시간이 가까운 녀석과 24시와 끝나는 시간이 가까운 녀석을 선택하자. => (0,2) , (22,24) 이러면 시작을 누구로하지..? 3. 그 회의시간이 가장 짧은 녀석의 시작시간과 가장 근사하게 끝나는 회의를 앞세우자. ㄴ 3-1 . 근사하게 끝나는 회의가 여러개면 총 회의시간이 가장 짧은애를 선택하자. 아 끝나..
2022.08.14 -
알고리즘) baekjoon 입력에 대하여
3 1 2 3 => 3개의 입력을 받을 것이며, 해당 입력은 둘째 줄 부터 차례대로 이다. input = sys.stdin.readline # 입력을 빠르게 받기 위함. n = int(input()) # 문자열이 아닌 정수 값으로 받는다. lst = [int(input().strip()) for _ in range(n)] # list형태에 입력 값들을 저장한다. # 받는 형태는 본인 마음 5 2 100 76 85 93 98 n.m을 처음에 받고 n개 만큼 입력을 받는 경우구나.. import sys input = sys.stdin.readline n,m = map(int, input().split()) lst = list(map(int, input().split())) # 리스트에 숫자로 입력 받는 경우..
2022.08.11 -
알고리즘) Baekjoon 1991 트리 순회
이 문제에서 맹점은 순회라는 것이 매 노드 마다 동일하게 이루어지는 것을 보는것 같다.( 순회 종류에 따라서 ) 즉 전위 순회를 진행할때 A 노드 시작으로 왼쪽으로 내려가서 전위 순회를 하고 또 다시 왼쪽으로 내려가고 이런식으로 동일한 과정이 반복되는 것이다. 순회의 순서가 명시되어 있어 구현하는데 있어서는 그렇게 어렵지 않다. 루트 라는것을 해당 노드를 print하는 구문으로 사용하게 되면 출력의 형태가 원하는 형태 처럼 된다는 것을 파악하는 것도 중요해 보인다. 또 봐야할 것이 우선순위를 어떻게 두어야 할지인데 사실 순회의 종류와 상관없이 왼쪽을 먼저 보고 그 이후에 오른쪽을 보는 형태이므로, 루트라는 print를 하는 형태를 적절한 곳에 위치시키면 해결 될 것 같다. 다만 머리로 이해하고 코드를 따..
2022.08.10 -
알고리즘) Baekjoon 하노이탑
재귀함수를 학습하지 않고 해당 문제를 만나면 과연 풀 수 있을까? 아무튼, 해당 문제는 재귀함수의 클래식한 문제인 것 같다. 생각의흐름. (1) 시작점 (2) 보조지점 (3) 목표지점 모든 원판을 목표지점(3)으로 옮기기 위해서는 목표지점(3) 맨 하단 부분에는 5번이 있어야 한다. -> 5번을 목표지점(3) 하단에 위치 시키려면 1~4번들이 다른 곳에 있어야 한다. = ( 다른 곳은 보조지점(2) 하나 밖에 없으니 결국 보조지점(2)에 전부 있어야한다.) -> 시작점(1)에 있는 원판을 목표지점(3)에 옮긴다. 근데 1~4번은 어떻게 이쁘게 (크기대로) 보조지점(2)에 쌓을 수 있지? * 한글로 시작점,보조지점,목표지점 이라고 명시된 것들은 문맥적 의미이고 ( ) 안에 숫자가 우리가 정한 1~3번 위..
2022.08.10 -
알고리즘) linked_list/ Queue/ Stack 구현해보기
Linke_list 의 전체적인 구조 리스트들의 각각 원소들이 서로와 이어져있는 구조를 보이고 있다. 실제로 코드로 해당 자료구조를 구현해보자. class Node: def __init__(self, val =None): self.val = val self.nextval = None class Linkedlist: def __init__(self): self.headval = None def listprint(self): # 링크드리스트 연결 확인 printval = self.headval while printval is not None: print(printval.val) printval = printval.nextval def AtBegining(self,newdata): # 처음 부분 노드 추가하기..
2022.08.09