클라우드의 핵심, 가상화와 클라우드 관리 스택 온프레미스와 프라이빗 클라우드의 가장 큰 차이점은 클라우드의 핵심 능력을 보유하고 있는지의 여부다. 여기서 말하는 클라우드의 핵심 능력은 '신속함'이다. 기업의 서비스에 사용자가 몰리면 프라이빗 클라우드는 해당 서비스를 위한 인프라를 증설해 빠르게 서비스를 안정화시킬 수 있다. 반면 온프레미스는 이것이 대단히 어렵다. 인프라를 새로 주문하고 이를 설치해 서비스에 연결할 때까지(보통 1~2주) 서비스를 안정시킬 수 없다. 이러한 신속함을 갖기 위해 프라이빗 클라우드는 두 가지 핵심 능력을 갖추고 있어야 한다. 첫번째는 '가상화'이다. 가상화는 클라우드를 지탱하는 핵심 기술이다. 가상화란 네트워크 장비, 서버, 스토리지(저장 장치) 등 데이터 센터 내의 인프라 ..
Scale Up 서버의 자원이 부족해 서버의 스펙을 상승시키는 것을 말한다. 하나의 서버의 능력을 증강하기 때문에 수직 스케일링(Vertical Scaling)이라고도 한다. 즉, 기존의 하드웨어를 보다 더 높은 사양으로 업그레이드 하는 것을 말한다. 예를 들어 AWS에서 스펙이 더 좋은 인스턴스 타입으로 교체하는 것과 같다. Scale Out 서버의 스펙을 상승으로는 한계가 있어 효율이 떨어지는 시점이 있다. 기존의 서버와 같은 사양의 서버 대수를 증가시키는 방법으로 처리 능력을 향상시키는 것을 말한다. 이 방식을 Horizontal scaling이라고도 하며 확장이 Scale Up보다 다소 유연하다. 1의 처리 능력을 가진 서버에 동일한 서버 4대를 추가하여 총 5의 처리 능력을 만드는 것이다. → ..
입력 6 6 10 13 9 8 1 연속적으로 3잔을 모두 마실 수 없다는 제한이 걸린 문제이다. n번째에 제한을 두는 문제는 i번째를 기준으로 (i - 1), (i - 2), (i - 3).. 번째를 생각봐야한다. n = int(input()) grape = [0] sum = 0 for _ in range(1, n + 1): grape.append(int(input())) dp = [0, grape[1]] if n > 1: # 포도주가 1잔일 수 있음 dp.append(grape[1] + grape[2]) for i in range(3, n+1): dp.append(max(dp[i-1], dp[i-2] + grape[i], dp[i-3] + grape[i] + grape[i-1])) # 차례로 이번 차례..
10 10 -4 3 1 5 6 -35 12 21 -1 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구해야 한다. 여기서 연속된 몇개의 수는 연속적으로 증가하는 수가 아닌 배열의 인접한 수임에 주의하자 !!!! 만약 연속적인 배열의 값이 모두 양수라면 해당 값들을 모두 더해준다. 이때 현재 인덱스의 배열값이 음수라고 해보자 그 음수 값을 더한 누적 합에 다음 인덱스 배열값을 더하면 다음 인덱스 배열에 있던 기존의 값보다 작아질 수 있다. 입력 예시로 생각해보자 10 6 9 10 15 21 -14 12 33 32 21 + (-35)의 값은 -14이다. 해당 값에 + 12를 하면 -2 값이 나온다. -2 값은 기존의 12 값보다 작으므로 걸러지고 기존 값인 12가 남는다. 만약 여기서 다..
정방향, 역방향 가장 긴 증가하는 수열을 구한뒤 각 dp의 값을 합쳐준다. 이때 -1을 하는 이유는 바이토닉 수열의 변곡점 부분의 dp 값이 2번 카운팅되기 때문이다. N = int(input()) A = list(map(int, input().split())) A.insert(0, 0) dpf = [1] * (N + 1) # 정방향 dpr = [1] * (N + 1) # 역방향 dps = [1] * (N + 1) # 합칠 때 for i in range(1, N + 1): for j in range(1, i): if A[j] < A[i]: dpf[i] = max(dpf[i], dpf[j]+1) for i in range(N, 0, -1): for j in range(N, i, -1): if A[j] < ..
6번 정도 실패하고 반례 테스트케이스 보고 해결한 문제 ㅠ_ㅠ 처음 생각한 코드는 다음과 같다. n = int(input()) a = list(map(int, input().split())) a.insert(0, 0) dp = [0] * (n + 1) dp[1] = a[1] for i in range(1, n + 1): for j in range(1, i): if a[j] < a[i]: dp[i] = max(dp[i], a[i] + dp[j]) # print(dp) print(max(dp)) 해당 코드로 문제에 주어진 입력 예제를 넣었을 때는 정답이 출력되지만 채점시 틀렸다고 떴다. 반례 6 10 20 10 30 20 50 다음과 같이 입력이 주어졌을 때 내가 원했던 dp는 [10, 30, 10, 60,..