목록분류 전체보기 (365)
위상 정렬을 통해 풀 수 있다. 오랜만에 써보는 거라 다시 복습했다. 일단 키를 재는 문제이기에 그래프에 사이클이 없다고 판단했다. graph에 이동 경로를 넣어준다. 목적지가 b이기에 indegree 리스트에 진입차수를 올려준다. 진입차수가 0인것을 모두 queue에다가 삽입하고 시작 큐에서 하나씩 팝해가면서 진입차수를 빼주고 진입차수가 0이되면 큐에 삽입 무한반복 from collections import deque def topology_sort(): answer = [] q = deque() for i in range(1, v+1): if indegree[i] == 0: q.append(i) while q: cur = q.popleft() answer.append(cur) for i in grap..
처음 더한다, 더하지 않는다 두 가지 경우의 수로 재귀 함수를 돌렸으나 시간초과 문제로 다른 방법을 모색하게 된다. 1. 수열을 반으로 자른다. [-7, -3, -2, 5, 8] => [-7, -3] , [-2, 5, 8] 2. 부분수열을 구하고 정렬한다. [-10, -7, -3] [-2, 3, 5, 6, 8, 11, 13] 3. 이분탐색으로 데이터를 하나씩 찾아준다. bisect을 이용해서 right - left를 하면 중복 요소개수까지 구할 수 있다. 4. 자기 자신도 탐색을 진행한다. from itertools import combinations from bisect import bisect_left, bisect_right def find_idx(list_data, data): return bis..
PV와 PVC에 대해 알아보려고 한다. 관리자가 NFS 볼륨을 만들면 이를 에일리어싱한 PersistentVolume을 생성한다. 그러면 개발자 담당에서는 pv-nfs와 연결된 pvc-nfs를 이용한다. pv-nfs가 pvc-nfs에게 피자 한조각 씩 때준거라 생각을 하자 apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs spec: capacity: storage: 100Mi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain nfs: server: 192.168.1.10 path: /nfs_shared/pvc-vol 관리자가 생성하는 pv코드이다. accessModes에 접근 ..
2019 카카오 블라인드 채용 문제이다. 레벨은 3이다. https://school.programmers.co.kr/learn/courses/30/lessons/42892 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제에서 힌트? 인지는 모르겠지만 이진트리라고 말을 했다. 그래서 이진트리를 구현했다. 먼저 입력 값을 정렬을 해주었다. 첫 번째 값이 root값이 나온다. 그 root값을 기준으로 x좌표값을 비교하여 이진트리를 완성해 간다. 전위연산 후위연산은 재귀로 쉽게 구현할 수 있다. import sys sys.setrecursionlimit(10*..
오늘은 볼륨에 대해 실습했다. 먼저 emptyDir이다. 얘는 파드 내 컨테이너들끼리 데이터를 공유하기 위해서 볼륨을 사용한다. 최초 볼륨이 생성될 때 내용이 비어있어 emptyDir라는 이름이 생겼다. 이 볼륨은 파드 안에 생성되기 때문에 파드가 재생성되면 데이터가 없어진다. 즉 볼륨에 쓰이는 데이터는 일시적인 사용목적이다. volumes의 이름은 두 개의 컨테이너의 volumeMounts와 매칭시켜준다. val a = volumes val b = volumes 같은 느낌으로 생각하니 이해가 빨랐다. html-builder에서 생성된 웹리소스를 공유 디렉터리에 저장하면 nginx가 이를 출력해 주는 형식이다. volumes이 두 개의 컨테이너를 share 해준다는 점을 꼭 기억한다. 배포를 하고 ip에..
이것도 시리즈 문제인 듯하다. 가장 긴 증가하는 부분 수열의 알고리즘을 이용하면 된다. dp로 하면 메모리 초과 나서 이분탐색으로 풀어주어야 한다. 제거해야 할 전깃줄 개수는 쉽게 구할 수 있었으나 요소를 구하는데 고민을 많이 했다. lis 리스트를 하나 만들어서 최장길이 값을 넣어주고 역순으로 탐색을 해서 제거대상을 뽑아 주었다. def bs_func(target): l,r = 0,len(bs) t = 0 while l
딱히 어려운 부분은 없었으나 멀티탭 크기가 넘을 때 빠질 애를 선정하는 방법에 대해서 고민을 좀 했다. 가장 멀리 떨어진 애가 먼저 빠지도록 코드를 짰다. 어케야 효율적으로 짤 수 있을까 고민했으나 그냥 index를 사용해서 판별하는 게 내가 생각할 수 있는 최선이었다. import heapq n, k = map(int, input().split()) data = list(map(int, input().split())) list_data = [] answer = 0 for i in range(k): if data[i] in list_data: continue if len(list_data) < n: list_data.append(data[i]) continue temp_list = data[i:] idx..
시리즈가 꽤 많은 문제다 이게 푼 지 좀 오래돼서 기억이 가물가물하다. LIS가 DP로 푸는 방법이 있는데 이 문제는 메모리 제한이 걸리므로 이분탐색으로 풀어주어야 한다. 이분 탐색으로 LIS 길이를 구할 수 있다. 하지만 문제에서는 LIS 요소까지 출력을 해주어야 한다. 나는 이분탐색으로 도출한 최장 길이 값을 이용해서 LIS를 역순으로 탐색해서 값을 저장해 주었다. def bs_func(target): l,r=0,len(bs) t = 0 while l