Traditional Deployment 여러 버전의 앱을 하나의 서버에 돌린다. 효율성, 확장성이 떨어진다.
Virtualized Deployment 가상머신 사용 Hypervisor를 통해 GeustOS를 생성 컴퓨터 한대를 시뮬레이션 한다. cpu/ram/hdd 장치 필요 -> 호스트 운영체제에서 생성하여 실행 확장성이 좋아진다. cpu/ram/hdd 를 직접 생성하여 사용함으로 오버헤드가 증가하며 성능이 떨어진다.
Container Deployment
하나의 호스트 서버에서 또다른 운영체제를 띄울 필요없이 하나의 컨테이너에서 띄울 수 있다. 각각의 컨테이너는 커널을 공유한다. 경량화, 오버헤드가 줄어들며 성능이 향상된다.
Kubernetes Deployment 서버 여러대에서 컨테이너를 관리한다. 머신들을 클러스트하여 사용한다.
명령 줄 인터페이스 또는 명령어 인터페이스는 가상 터미널 또는 터미널을 통해 사용자와 컴퓨터가 상호 작용하는 방식을 뜻한다. 즉, 작업 명령은 사용자가 컴퓨터 키보드 등을 통해 문자열의 형태로 입력하며, 컴퓨터로부터의 출력 역시 문자열의 형태로 주어진다. from 위키백과
N, L, K = map(int, input().split())
subtask = []
score = 0
count = 0
for i in range(N):
sub1, sub2 = map(int, input().split())
subtask.append([sub1, sub2])
subtask.sort(key=lambda x:x[1])
for lst in subtask:
if count >= K:
break
sub1, sub2 = lst[0], lst[1]
if L >= sub1:
score += 100
count += 1
if L >= sub2:
score += 40
print(score)
<해설>
위 문제의 핵심은 2차원 배열을 정렬하여야 한다는 것입니다. 왜냐하면, 해당 문제의 최대 풀 수 있는 문제 수가 정해져 있습니다. 그런데, 역량이 부족하여 2번째 어려운 보너스 부분 점수를 못 받는 문제를 먼저 풀어버리면 문제 풀이 수가 증가하여 최대한 받을 수 있는 점수가 줄어들게 됩니다. 따라서 최대한 많은 점수를 얻기 위해서는 어려운 문제 기준으로 정렬을 수행하여야 합니다.
N = input()
A = list(map(int, input().split()))
M = input()
lstM = list(map(int, input().split()))
for ele in lstM:
if ele in A:
print(1)
else:
print(0)
해당 문제를 해결하기 위해서 in 을 활용하였습니다.
위 방식은 심플하고 좋아보이지만 python3으로 해결하려고 하면 시간초과가 발생합니다. (하지만 pypy3은 괜찮아요)
이번에는 패스트캠퍼스 강의를 통해서 알게된 풀이 방식입니다.
N, A = int(input()), {i:1 for i in map(int, input().split())}
M, B = int(input()), list(map(int, input().split()))
for i in range(M):
print(A.get(B[i],0))
위 문제의 핵심은 딕셔너리를 활용하는 것입니다. 입력 받을 때 {} 안에 for 문을 활용하여 입력값들을 딕셔너리로 받습니다. 그리고, get함수를 통해서 첫번째 인자 값이 존재하지 않는다면 2번째 인자 값을 반환하도록 합니다.
해당 결과를 보기전까진 [:] 에서 오른쪽 숫자는 문자열 길이를 초과해서는 안될 것이라는 생각이 있었는데 넘어가도 최대 값 이상 안넘어가며 오류또한 나타나지 않는 결과를 얻었다.
다시말해, 값이 초과하여도 상관이 없기 때문에 for문을 끝까지 돌려도 된다는 것이다.
아래 코드는 이코테 답안이다.
def solution(s):
answer = len(s)
# 1개 단위(step)부터 압축 단위를 늘려가며 확인
for step in range(1, len(s) // 2 + 1):
compressed = ""
prev = s[0:step] # 앞에서부터 step만큼의 문자열 추출
count = 1
# 단위(step) 크기만큼 증가시키며 이전 문자열과 비교
for j in range(step, len(s), step):
# 이전 상태와 동일하다면 압축 횟수(count) 증가
if prev == s[j:j + step]:
count += 1
# 다른 문자열이 나왔다면(더 이상 압축하지 못하는 경우라면)
else:
compressed += str(count) + prev if count >= 2 else prev
prev = s[j:j + step] # 다시 상태 초기화
count = 1
# 남아 있는 문자열에 대해서 처리
compressed += str(count) + prev if count >= 2 else prev
# 만들어지는 압축 문자열이 가장 짧은 것이 정답
answer = min(answer, len(compressed))
return answer
알파벳 대문자와 숫자(0 ~ 9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다.
<나의 풀이>
s = input()
charList = []
numList = []
for i in range(len(s)):
if ord(s[i]) >= 65:
charList.append(s[i])
else:
numList.append(s[i])
charList.sort()
numList.sort()
for i in range(len(charList)):
print(charList[i], end='')
for i in range(len(numList)):
print(numList[i], end='')
해당 문제는 문자의 크기를 비교하고 해당 문자가 숫자인지 알파벳인지 구별해야한다.
- 문자의 크기를 비교하여 정렬하는 것은 sort()함수를 호출하면된다.
- 해당 문자가 숫자인지 알파벳 인지는 ord(s[i]) >= 65를 이용하여 구할수 있다.
65이상 값이 알파벳으로 분류되는 것은 A의 아스키 코드 값이 65이기 때문이다.
앞으로도 종종 알파벳인지 숫자인지 구별할 필요가 있을 것으로 생각되므로 ord(s[i]) >= 65 조건을 기억해두자