본문 바로가기

전체 글147

[알고리즘] Prim`s algorithm. MST 구하는 2번째 방법. 프림 반갑습니다. 이번엔 O(ElogV) 시간복잡도를 가지는 Prim알고리즘에 대해서 알아보겠습니다. ​ 이건 음.. heap을 알아야 하는데, 힙구조를 가지는 priority_queue를 사용할 수 있으면 좋습니다. 없으면 kruskal이 구현하기 더 낫습니다. ​ ​ Kruskal VS Prim 결과부터 말하면 Edge가 많으면 Prim, Edge가 적으면 Kruskal이 좀 더 좋습니다. (이론상) ​ Kruskal은 sort과정에 O(ElogE)이 피할 수 없기에 E에 영향을 받고, Prim은 O(ElogV)입니다. 이미 방문된 지점은 다시 방문되지 않기에 pq의 push나 pop과정이 없어서 그렇습니다. 근데 MST를 찾는다는건 기본적으로 V < E니까 쓰겠죠...? 근데 그냥 편한대로 합시다. ​ .. 2021. 10. 2.
[Programmers] 2021 kakao blind - 합승 택시 요금 https://programmers.co.kr/learn/courses/30/lessons/72413 코딩테스트 연습 - 합승 택시 요금 6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4 programmers.co.kr 풀이 방법 : 플로이드, 다익스트라 ​ 나의 사고 과정 1. undirected, .. 2021. 10. 1.
[자료구조] MST를 구할 때 사용하는 크루스칼 알고리즘(Kruskal) 설명에 앞서, Union - Find 연산에 대해서 학습을 해야하는데, 이 부분은 제가 봤던 유튜브로 대체하겠습니다. https://www.youtube.com/watch?v=eTaWFhPXPz4 이것과 Optimized Union/FInd를 보시고 https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 www.acmicpc.net 이 문제를 풀어서 제대로 이해했나 확인해보시면 됩니다. ​ Kruskal 알고리즘을 왜 쓰는가? - MST를.. 2021. 9. 30.
[BOJ] 같은수로 만들기 2374, 13146 (분할정복, 스택) https://www.acmicpc.net/problem/2374 2374번: 같은 수로 만들기 n(1 ≤ n ≤ 1,000)개의 자연수 A[1], A[2], A[3], …, A[n]이 있다. 이 자연수에 Add(i)라는 연산을 하면, A[i]가 1만큼 증가한다. 이때, A[i]만 증가하는 것이 아니고, A[i]의 좌우로 인접한 같은 수의 그룹이 한 www.acmicpc.net 풀이 방법 : 분할정복 (재귀), 스택 ​ 분할정복을 이용한 방법은 O(N^2)까지 나올 수 있어서, 13146에서 시간초과가 납니다. 하지만 stack을 이용한 풀이로 하면 O(N)으로 해결할 수 있습니다. ​ 1. stack을 이용한 풀이 https://www.acmicpc.net/problem/13146 13146번: 같은 .. 2021. 9. 29.
[BOJ] 12738, 14003 LIS(가장 긴 증가하는 수열, 이분탐색) - 2 https://www.acmicpc.net/problem/12738 12738번: 가장 긴 증가하는 부분 수열 3 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000) www.acmicpc.net n이 100만이므로 O(nlogn)의 풀이를 택해야 합니다. 이번엔 이분탐색을 이용해서 풀어보도록 하겠습니다. 참고로 이분탐색은 빠르게 개수는 찾을 수 있지만, LIS가 항상 올바른 순서로 있다고 장담할 순 없습니다. lower_bound함수를 이용하면 t보다 같거나, 큰 가장 최소의 인덱스를 반환해줍니다. 예를들면 arr[3] = {1,5,6} 일때 lower_bo.. 2021. 9. 25.
[BOJ] 11053, 11722, 14002 LIS(가장 긴 증가하는 수열, 가장 긴 감소하는 수열) - 1 https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 저는 바로 못풀었습니다. DP로 어떻게 풀지? 이렇게 생각했어요. 위키피디아에서 LIS를 검색해서 시뮬레이션을 보고 이분탐색으로 했습니다. 전 아이언5티어입니다.. ​ 풀이 방법 : 2가지가 있습니다. LIS 시리즈가 1~5까지 있는만큼, 더 좋은방법이 존재합니다. 이번 포스팅에서는 DP를 이용한 풀이, 다음 포스팅에서.. 2021. 9. 25.
[Linux] Vim 사용법 (VI아님) 생존형 기능 포함 안녕하세요!! 오늘은 리눅스의 VIM 사용법에 대해서 알아보겠습니다. 일반적으로 VI와 VIM의 조작법은 약간 다릅니다. VI는 hklj로 움직여야 합니다. 정신을 못차릴 수 있습니다. VIM은 VI의 Improved 버전이라서 방향키로 글자를 앞 뒤로 움직일 수 있고, backspace가 먹힙니다. ​ 기본적인 복사 삭제는 안다고 가정하겠습니다. yy, p, 10yy, 10dd, x, 등등.. ​ 알아볼 기능들 (생존형 기능) 1. Visual Mode(여러줄 드래그해서 사용하는 법), 여러줄 잡아서 움직일때 좋음. 2. Undo (실수 했을때 되돌리기 기능, ctrl + z하면 연봉 500만원 삭감) 3. 검색기능 ( 구글크롬에서 '/' 누르듯.. ) 4. 방향키 말고 위 아래로 여러칸씩 움직이는 방.. 2021. 9. 13.
[BOJ] 2230. 수 고르기 (이분탐색버전) https://www.acmicpc.net/problem/2230 2230번: 수 고르기 N개의 정수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오. 예를 들어 www.acmicpc.net 투 포인터 이분탐색의 발상을 배웠습니다. *홍보* 문제풀이 강의를 한번도 들어본적이 없다가 BarkingDog님 알고리즘 강의를 처음으로 들었는데.. 이정도 강의 퀄리티면 문제풀이 강의 듣는 사람들의 입장이 이해가 가는 것 같습니다. ​ 뭐랄까.. 모든 문제를 시간들여 다 풀면서 느끼면 더 좋겠지만, 현실적인 제약이 따르잖아요? 또한 수학 풀때도 느꼈지만, 아무리 아인슈타인이라.. 2021. 9. 7.
[VSCODE] 터미널 시작위치 오류(powershell 나오는 경우),Git Bash가 안나오는경우. 아오 짜증이 납니다 진짜. VSCODE를 쓰시다가, Default가 Git Bash인데 자꾸 powershell로 나와서 실행도 안되고 아주 먹통이 됐습니다. 노트북도 망가진걸보니, vscode의 문제같았습니다. ​ 근데 이게 뭘 내가 만진게 아니고, 그냥 자고 일어나니까 이렇게 됐습니다. 아오 마이크로소프트도 사람인지, 실수를 했나봅니다. ​ 검색을 했습니다. 안나옵니다. 혹시나해서 vscode github issue에 가보니, 저랑 같은 문제들이 xxhours ago로 해서 엄청나게 많습니다. ​ 해결법 먼저 공개합니다. 다운그레이드 하세요. ( 1.60 -> 1.59.1) Help -> About 누르면 자기 버전 나옵니다. ​ 업뎃 하면서 뭔가 하자가 생겼나봅니다. ​ setting.json에 u.. 2021. 9. 4.
[BOJ] 배열돌리기 2 (겉면부터 하나씩 돌려도 된다) https://www.acmicpc.net/problem/16927 16927번: 배열 돌리기 2 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] www.acmicpc.net 처음에 뭐가 다르지? 했는데, R이 다르다 R이 1천 -> 10억이다. 시간이 오래 걸렸다. 몇시간 걸렸다. 왜 그랬는지 알아보자. 1. 뭔가 %로 나눠야한다는건 알았다. N*M으로 나눴다. 대체 왜 이런 생각을 했는지 모르겠다. 당연히 틀렸다. 2. 생각해보니까 맨 바깥 줄이 5*4에서 14번만에 제자.. 2021. 9. 1.
728x90