알고리즘
-
[C,C++] prioritiy queue with heap알고리즘 2022. 9. 8. 21:25
0908 포인터 1. '포인터도 변수다' 포인터는 값(value)의 주소를 갖고 있는 변수이다. int* : 인트형 포인터 변수 2. &, * 는 연산자다. & : 뒤에있는 변수를 값( value ) 로 인식. 해당 값이 있는 포인터(즉 주소)를 알려준다. (return value : pointer) * : 뒤에 있는 변수를 포인터로 인식. 해당 포인터의 연결된 값을 알려준다. (return value : value) Heap 완전 2진 tree. 부모노드 *2 -> 자식노드 Priority Queue with heap 무조건 부모노드가 자식노드보다 높은 우선순위를 갖도록 해야한다. 1. add value 1) heap의 제일 마지막 노드에 놓는다. 2) 정해진 priority에 맞게 위로 올라가면서 점..
-
[boj] 14003,11722 가장 긴 증가 부분 수열 (feat. bisect)알고리즘 2021. 1. 17. 23:30
오늘은 가장 긴 증가/감소 부분수열 시리즈를 쭉 풀어보았다. 1. 11722번 www.acmicpc.net/problem/11722 11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} www.acmicpc.net [접근법 1] 나는 처음에는 좀 무식하게 LCS로 접근했다. def solution(X,Y): n=len(X) m=len(Y) T=[[0 for j in range(m+1)] for i in range(n+1)] for i in range(1,n+1): for..
-
[boj]합분해알고리즘 2021. 1. 16. 21:11
www.acmicpc.net/problem/2225 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net [해설] Dynamic programming 문제이다. 예를들어 20,3 인경우 같은 숫자를 계속 써도 되기 때문에 20,2 + 19,2 + 18,2 +.... 0,2 를 더한 경우의 수가 된다. def solution(N,K): g=[] for i in range(1,K+1): temp=[] for j in range(N+1): if i==1: temp.append(1) else: temp.append(sum(g[i-2][:j+1])) g.append(temp) return g[-1][-1] N,K=map(int,input().spli..
-
[boj]1504 특정한 최단 경로알고리즘 2021. 1. 15. 11:40
www.acmicpc.net/problem/1504 1504번: 특정한 최단 경로 첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존 www.acmicpc.net [해설] 여러번의 dijkstra로 문제를 해결했다. 1--N 으로 가는데, 특정한 정점 A와 B를 지나는 경로는 2가지이다. 1-->A-->B-->N 1-->B-->A-->N 이래서 각각 경로에대해 최단경로를 찾아서 min값을 구해줬다. from heapq import heappush, heappop import sys INF = sys.maxsize def dik..
-
[boj]오르막수알고리즘 2021. 1. 15. 11:35
www.acmicpc.net/problem/11057 11057번: 오르막 수 오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수 www.acmicpc.net [해설] 간단한 DP DP를 할때, 나는 표를 꼭 만들어보려고 한다. 간단한 규칙이니 이해가 될꺼라고 생각한다. 해당 행의 값은 바로 윗행의 sum값이다. def solution(N,arr): if N==-1:#1 return 10 elif N==0: return 55 else: for i in range(1,N+1): temp=[] for j in range(10): tem..
-
[kakao 2020]기둥과 보 설치알고리즘 2021. 1. 14. 19:01
programmers.co.kr/learn/courses/30/lessons/60061 코딩테스트 연습 - 기둥과 보 설치 5 [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] [[1,0,0],[1,1,1],[2,1,0],[2,2,1],[3,2,1],[4,2,1],[5,0,0],[5,1,0]] 5 [[0,0,0,1],[2,0,0,1],[4,0,0,1],[0,1,1,1],[1,1,1,1],[2,1,1,1],[3,1,1,1],[2,0,0,0],[1,1,1,0],[2,2,0,1]] [[ programmers.co.kr [해설] 구현 문제. 요즘은 이렇게 구현문제가 많이 나오는 것같다. from collections..
-
[kakao 2019 internship]징검다리 건너기알고리즘 2021. 1. 12. 21:18
programmers.co.kr/learn/courses/30/lessons/64062 코딩테스트 연습 - 징검다리 건너기 [2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3 programmers.co.kr [실수 1] 처음에 가장 간단하게 생각했던건 징검다리를 sorted 하고 check하는 방법. 이건 시간 초과가 났다. list--> set 으로 바꾸는 것 자체가 O(n) 그걸 sorted 하는 것이 O(nlogn) 그 한줄로 이미 O(n^2logn)이 되버렸다.ㅎ def solution(stones, k): s=sorted(list(set(stones))) q=[] answer=0 for i in s: if not check(i,stones,k): answer=i break return..
-
[boj]2146 다리만들기 - 파이썬, pypy3알고리즘 2021. 1. 11. 11:44
www.acmicpc.net/problem/2146 2146번: 다리 만들기 여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다 www.acmicpc.net [해설] 1. BFS를 통해 각 섬의 영역 상태를 구한다. 2. 각 섬에 대해서 BFS를 하며, 영역을 확장시키며 다른 섬과 만날 때까지의 거리를 구한다. from collections import defaultdict,deque def land(cur,island,count,N,total_land,gmap):#land의 상태를 구함 q=deque([]) q.append(cur) visit=[cur] X=[0,0,-..