본문 바로가기

전체 글94

[Python Errors] 파이썬 에러나면 확인해볼 것. 메모리 초과: 재귀 확인 재귀로 스택에 넣는 함수가 많아지면서 스택오버플로우 되는 경우. * 메모리의 페이지가 할당되며 여유를 가지고 할당되어서 그 안에서 사용됨. 지역변수는 스택에 할당되어 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다. 반면 전역변수는 데이터(힙보다 위)에 할당되어 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. 런타임 에러: 인덱스 확인 시간초과: 느린 알고리즘 또는 무한 루프 확인 출력초과: print 확인 2021. 7. 7.
[테스트케이스 추가] 백준 2211번: 네트워크 복구 (python, 파이썬) 1. 문제: 백준 2211번: 네트워크 복구 https://www.acmicpc.net/problem/2211 2211번: 네트워크 복구 첫째 줄에 두 정수 N, M이 주어진다. 다음 M개의 줄에는 회선의 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 컴퓨터와 B번 컴퓨터가 통신 시간이 C (1 ≤ C ≤ 10)인 회선으로 연결되어 있다 www.acmicpc.net 2. 풀이 다익스트라를 하면서 heap에 push할 때 prev 어레이에 현재 값과 앞(index)으로 연결될 값(value)을 입력해준다. 3. 구현 import sys import math import heapq # sys.stdin = open('input.txt') n,m = map(int, sys.stdin.readl.. 2021. 7. 7.
[테스트 케이스 모음] 백준 10473 : 인간대포 ( 파이썬 python ) 1. 문제 https://www.acmicpc.net/problem/10473 10473번: 인간 대포 입력은 한 개의 길찾기 문제를 표현한다. 첫 줄에는 두 개의 실수가 입력되며 각각은 당신이 현재 위치한 X, Y좌표이다. 두 번째 줄에는 목적지의 X, Y좌표가 실수로 입력된다. 이어지는 줄에는 대 www.acmicpc.net 2. 풀이 점과 점 사이에 걸리는 시간을 값으로 하는 array를 만들어서 dijkstra한다. 점들은 시작점, 캐넌들, 도착점이며 거리는 시작점, 도착점: 걸어가는 거리, 캐넌들: 50m는 그냥 가고 나머지는 걸어가는 시간 + 2초 값을 넣어준다. 그림에서 막 꺾이고 이래서 겁을 좀 먹었는데 거리를 간단하게 생각하면 쉬운 문제이다. 3. 구현 import sys import h.. 2021. 7. 7.
[테스트케이스 모음] 백준 5719번: 거의 최단 경로 Index Error 와 시간초과 에러 해결 python, 파이썬 1. 문제 https://www.acmicpc.net/problem/5719 5719번: 거의 최단 경로 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 장소의 수 N (2 ≤ N ≤ 500)과 도로의 수 M (1 ≤ M ≤ 104)가 주어진다. 장소는 0부터 N-1번까지 번호가 매겨져 있 www.acmicpc.net 2. 풀이 1) 모든 점에 대해 최단거리 값을 구한다. (dijkstra) 2) 목표 지점 D의 최단거리 값을 기준으로 bfs를 통해 경로를 추적한다. 여기서 경로를 추적한다는 말은 ' cur 다익스트라값 - 탐색하는 점(pos)와 (cur)사이 cost == pos의 다익스트라값' 을 의미한다. 3) 이렇게 삭제해야할 점들을 set에 넣어 중복되지 않게 .. 2021. 7. 7.
[테스트케이스 추가] 백준 16681: 등산 66%에서 시간초과나는 경우 python, 파이썬 1. 문제 https://www.acmicpc.net/problem/16681 16681번: 등산 첫 번째 줄에 지도에 표시된 지점의 개수, 지점을 잇는 경로의 개수, 주환이의 거리 비례 체력 소모량, 높이 비례 성취감 획득량을 나타내는 정수 N, M, D, E가 공백을 사이에 두고 주어진다. (2 ≤ www.acmicpc.net 2. 풀이 고생을 좀 했는데, 핵심은 (1) 체력을 최소한으로 하는 dijkstra를 찾는다. 성취도와 계산하는 것은 최단거리를 찾은 후에 해도 된다. (이걸 생각하기가 어려웠다) (2) 모든 dijkstra를 찾지 말고 넘어가는 코드를 넣어야한다. (3) 올라갈 때 1->k 와 내려갈때 k->n을 다익스트라 하나의 코드로 작성할 수 있다는 것이다. dijk(1) 이랑 dijk.. 2021. 7. 6.
파이썬 heap 사용법: 파이썬 최소힙, 최대힙 [MinHeap] 기본적으로 heap을 만들면 minheap (작은 것에서 큰 것으로 높아지는 방향)이다. h=[] heapq.heappush(h,(1)) heapq.heappush(h,(3)) heapq.heappush(h,(2)) heapq.heappush(h,(7)) heapq.heappush(h,(10)) heapq.heappush(h,(12)) while h: cur = heapq.heappop(h) print(cur) 답: 1 2 3 7 10 12 [MaxHeap] 음수를 넣고 뽑아서 다시 -1을 곱해준다 h=[] heapq.heappush(h,(-1)) heapq.heappush(h,(-3)) heapq.heappush(h,(-2)) heapq.heappush(h,(-7)) heapq.hea.. 2021. 7. 6.
[테스트케이스 추가] 백준 1261번: 알고스팟 (python, 파이썬) 1. 문제 https://www.acmicpc.net/problem/1261 1261번: 알고스팟 첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미 www.acmicpc.net 2. 풀이 1) input을 받을 때 split()을 하지 못하는 것과 readline을 하면 줄바꿈('\n')이 함께 들어온다는 것을 명심해야한다. 2) N과 M은 둘이 서로 다른 예시를 넣어서 index 에러로 빠르게 확인한다. 3. 구현 import sys import heapq import math sys.stdin=open('input.txt') dr = .. 2021. 7. 5.
[테스트케이스 추가] 백준 1238번: 파티 (python, 파이썬) 1. 문제 https://www.acmicpc.net/problem/1238 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 2. 풀이 다익스트라. 단방향이기 때문에 갈 때와 올때의 길이 다르고 두 값을 더한 것의 최대값을 구해야한다. 3. 구현 import sys import heapq import math # sys.stdin=open("input.txt") N, X, T = map(int, sys.stdin.readline().split()) def dijk(start, e.. 2021. 7. 5.
[테스트케이스 추가] 백준 1916 최소비용 구하기 (python, 파이썬) 1. 문제 https://www.acmicpc.net/problem/1916 1916번: 최소비용 구하기 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 www.acmicpc.net 2. 풀이 다익스트라! 3. 구현 import sys import heapq import math # sys.stdin=open("input.txt") N = int(sys.stdin.readline()) bus = int(sys.stdin.readline()) gph=[[] for _ in range(N+2)] dist=[math.inf for _ i.. 2021. 7. 5.
[테스트케이스 추가] 백준 4485번 녹색 옷 입은 애가 젤다지? (python, 파이썬) 1. 문제 https://www.acmicpc.net/problem/4485 4485번: 녹색 옷 입은 애가 젤다지? 젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주 www.acmicpc.net 2. 풀이 주어진 지도가 graph라고 생각하고 dist도 같은 모양으로 만들어서 상하좌우를 순회한다. 3. 구현 import sys import heapq import math sys.stdin=open('input.txt') dr = [0,1,0,-1] dc = [1,0,-1,0] def valid(r,c,len): return r>=0 and c>=0 and r 2021. 7. 5.
[테스트 케이스 추가] 백준 1504 특정한 최단 경로 python,파이썬 1. 문제 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 2. 풀이 다익스트라로 풀면 되고, 1->v1->v2->n, 1->v2->v1->n 그리고 연결이 안될 경우 INF인 경우를 세줘야 한다. 3. 구현 import sys import heapq import math sys.stdin=open("input.txt") v,e = map(int, sys.stdin.readline().split()).. 2021. 7. 5.
[테스트케이스 추가] 백준 1753 최단경로 (python, 파이썬) 1. 문제 https://www.acmicpc.net/problem/1753 1753번: 최단경로 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1≤V≤20,000, 1≤E≤300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1≤K≤V)가 주어진다. www.acmicpc.net 2. 풀이 전형적인 다익스트라문제. [다익스트라 풀이] 1) dist, gph, edges(heap) 세 가지 list가 필요하다. dist = [math.inf for i in range(v+2)] gph = [[] for i in range(v+2)] edges=[] 2) gph에 연결관계를 넣는다. gph[u].append((v,w)): u에서 v로 갈 .. 2021. 7. 5.
반응형