본문 바로가기

분류 전체보기

(152)
BOJ. 16562번. 친구비 평범한 disjoint-set문제. 나는 적용하기 쉬운 union-find로 해결했다. 다만 실수가 있었는데, parent배열을 다 구해놓고, 부모를 찾을 때, parent의 값을 그대로 사용했다;;; 최종적으로 루트값을 찾을때는 find함수를 사용하도록 하자! www.acmicpc.net/problem/16562 16562번: 친구비 첫 줄에 학생 수 N (1 ≤ N ≤ 10,000)과 친구관계 수 M (0 ≤ M ≤ 10,000), 가지고 있는 돈 k (1 ≤ k ≤ 10,000,000)가 주어진다. 두번째 줄에 N개의 각각의 학생이 원하는 친구비 Ai가 주어진다. ( www.acmicpc.net package week_13; import java.io.BufferedReader; import jav..
[Sorting] sorting 코드 정리(Java) 기본적인 sorting 내용 몇개를 정리하여 공유한다 (사실 임시저장 글에 남아있는게 보기 싫어서...) 추후 python ver도 업로드 하도록 하겠다! import java.util.Arrays; public class Sort { public static void main(String[] args) { // 정렬하고자 하는 배열 int[] arr = {10,23,21,22,22,1,4,6,9,23,2,0,7,41,13}; bubbleSort(arr); selectionSort(arr); insertionSort(arr); QuickSort(arr); MergeSort(arr); HeapSort(arr); } // ================================================..
BOJ. 2933번. 미네랄,미네랄2 문제는 미네랄과 미네랄2가 동일하며, 같은소스로 시간차 거의 없이 통과된다. 구현(시뮬레이션) + BFS 조합의 문제이다. 클러스터가 다른 클러스터 더미에 매달리는(?) 예외를 잘 해석하면 풀 수 있다. 예외케이스를 처리하는데 생각보다 시간이 엄청 오래 걸렸다. 1. 막대기를 쏘는 방향을 좌,우 번갈아가며 선택한다. 2. 방향에 맞춰 미네랄을 파괴한다 3. 파괴한 상태에서 BFS탐색으로 공중에 떠있는 클러스터와, 아닌 클러스터를 구분한다. 4. 공중에 떠있는 클러스터만을 아래로 최대한 하강시킨다. 1,2,3번은 금방 처리했으나 4번에서 시간이 좀 걸렸다. 그냥 클러스터를 한칸씩 내려보며 안겹칠때까지 확인해보는 방법이 편하다. 각 라인마다 가능한 움직임을 계산하고, 그 최소값을 다시 계산하려다보니 복잡해졌..
BOJ. 11437번. LCA LCA 알고리즘은 누가 처음 생각했을지,,, 정말 세상은 넓고 똑똑한 사람들은 많다^^. Lowest Common Ancestor의 약자로, 최소 공통조상을 찾는 알고리즘이다. 핵심은 다음과 같다. 1. 각 노드의 깊이와 부모 노드를 저장해둔다. 2. 비교하고자 하는 두 정점이 주어지면, 두 정점의 같은 레벨에 있는 부모 노드를 최소로 움직여 찾는다. -> 어느 한쪽에 맞추는게 아마 최소! 3. 이렇게 레벨을 맞추고 나면, 한단계씩 위로 올라가면서 각자의 부모노드가 일치할 때까지 반복한다. www.acmicpc.net/problem/11437 11437번: LCA 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가장 가까운 공통 조상을..
BOJ. 11657번. 타임머신 이번 문제는 벨만-포드 알고리즘을 활용한 문제다. 실제 코드 상에서도, 각 정점을 돌아보면서 최소비용을 갱신해 나가는 형태가 다익스트라(우선순위 큐)를 사용하지 않은 코드랑 비슷했다. 물론 음의 가중치가 포함된 문제라 다익스트라로는 해결할 수 없다. + 추가로 거리를 계산할 때 오버플로우가 나는 바람에 출력초과가 나왔다. 넘칠 것 같으면 처음부터 long으로 넉넉하게 잡아주는 것도 실수를 줄이는 방법이 될 것 같다. www.acmicpc.net/problem/11657 11657번: 타임머신 첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M (1 ≤ M ≤ 6,000)이 주어진다. 둘째 줄부터 M개의 줄에는 버스 노선의 정보 A, B, C (1 ≤ A, B ≤ N, -10,000..
[GCP] Cloud Monitoring 로 VM 인스턴스 로그 수집하기 - 5.NAT을 통한 Static-IP 요금 절약 [ NAT? ] Cloud NAT을 사용하면 외부 IP 주소가 없는 Google Cloud 가상 머신(VM) 인스턴스가 외부 인터넷망으로 아웃바운드 패킷을 보내고, 다시 NAT을 거쳐 설정된 인바운드 응답 패킷을 받는다. 사용시 이점은 다음과 같다. 보안 수동 NAT IP 주소 할당을 사용하여 Cloud NAT 게이트웨이를 구성할 경우 공통 외부 소스 IP 주소 집합을 대상과 확실하게 공유할 수 있다. 예를 들어 대상 서비스는 알려진 외부 IP 주소로부터 들어오는 연결만 허용할 수 있다. 이그레스 방화벽 규칙에 따라 외부 IP 주소가 없는 VM이 인터넷에서 대상에 액세스할 수 있다. 지원 여부 Cloud NAT는 분산형 소프트웨어 정의 관리형 서비스이다. 프로젝트의 VM 또는 단일 물리적 게이트웨이 기기..
[GCP] Cloud Monitoring 로 VM 인스턴스 로그 수집하기 - 4. 중간 점검,앞으로 할 일 정리 [ 발생한 문제 정리 ] 1. 원래는 한창 celery에 관한 포스팅을 준비하고 있었는데 갑자기 문제가 터졌다. 여러가지 서비스를 이제 클라우드상에 배포할 예정인데 다음과 같이 Static IP에 대한 charge가 꾸준하게 발생하기 시작했다. 내부에는 팀원이 올린 vm인스턴스 하나와, 테스트용 마이크로서버2개가 있다. 따라서 이번에는 Cloud NAT를 이용해 외부로 공개되는 IP의 개수를 줄여 보안성을 높이고, 동시에 비용도 절감하려고 한다. 실제로 static ip를 사용하는 일반 vm과 nat를 사용하는 vm은 각각 시간당 0.004$ vs $0.0014$로 세배에 가까운 가격차이가 난다. 아래 링크에 들어가면 정확한 과금정책을 확인할 수 있다. cloud.google.com/nat/pricing..
[Roadmap] 2021 Data Engineer Roadmap 이번엔 따끈따끈한 21년 Data-engineer-Roadmap을 가져와봤다. 사실 로드맵은 추천일 뿐 꼭 지켜야하는 순서도, 필요성도 없다고 생각한다. 다만 내가 원하는 것은 이런 데이터플로우를 구축하고 적용시킬 환경에 지속적으로 노출되는 것이다. (한마디로 빅데이터 다뤄보고 싶다!!!) 사실 로드맵이 중요한게 아니라, 얼마나 잘, 빨리 습득해서 내 플젝에 지대로 써먹을 수 있는가가 핵심인 것 같다. 예전에 GCP로 데이터분석을 할 적에 buildabetterworld.tistory.com/15?category=941595 이런 파이프라인을 따라 만들어 보고 멋있다고 느낀게 시작이였다... 며칠사이 좋은 소식이 몇개 들려왔다. 하지만 이제 시작일뿐이다! 그것과는 별개로 나는 올해 취업준비와 동시에, 내..
BOJ. 1238번. 파티 이 문제는 다익스트라 알고리즘을 뒤집어 붙이는 문제이다. 처음에 리스트로 맵을 만든 다음, 해당 맵을 기준으로 두가지 다익스트라 알고리즘(하나는 정방향, 하나는 역방향)을 만들려고 했다가, 데이터 자체를 반전시키는 편이 훨씬 간편하다는 것을 깨닫고 선회했다. 문제 풀이는 간단하다. 1. 정방향에 따른 방문체크배열, 인접리스트, 최소비용행렬을 선언한다. 2. 역방향도 마찬가지로 만들어 준다. 3. 정방향과 역방향 각각에 따른 최소비용행렬을 둘다 계산한 다음, 정향향,역방향 비용의 합 중 최대비용인 놈을 찾으면 끝 www.acmicpc.net/problem/1238 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터..
[Theory] Graph 6. 최소비용 - 다익스트라(Dijkstra) 알고리즘 다익스트라(Dijkstra) 알고리즘은 하나의 시작 정점에서 끝 정점까지의 최단경로를 구하기 위한 알고리즘이다. 음의 가중치를 가지지 않으며, PriorityQueue의 사용여부에 따라 시간복잡도는 O(V^2)~O(E+VlogV)까지 나타난다. 음의 가중치를 허용하는 경우에는 벨판-포드(Bellman-Ford)알고리즘을 사용할 수 있다. (모든 정점들에 대한 최단경로를 구하는 데는 DP개념을 적용한 플로이드-워샬(Floyd-Warshall)을 사용할 수 있다.) 본론으로 돌아와서, 시작 정점이 주어졌을 때 각 정점까지의 최단경로를 구하려면 어떻게하면 될까? 다음 코드는 priorityQueue를 사용하지 않는 코드이다. import java.io.BufferedReader; import java.io.I..