먼저 멀티탭 스케줄링을 가장 간단한 언어로 요약하면,
n구의 멀티탭에 여러가지 전자제품을 사용하려는데(k개의 전자제품 사용 스케줄), 빼는 횟수를 최소화 하고 싶다는 것이다.
직관적으로 다음 아이디어가 떠오른다.
"그러면 그냥 다음에 나올 빈도수가 적은 것 먼저 뽑으면 되는거 아니야?"
그렇게 코딩을 시행해봤고, 광탈했다.
반례는 어렵지 않게 찾을 수 있었다.
"가장 늦게 나오는 플러그, 또는 절대 안나올 플러그를 먼저 뽑으면?"
이렇게 아이디어를 잡으면 다음 코드가 나온다.
import sys
input = sys.stdin.readline
n, k = map(int, input().rstrip().split())
con = list(map(int, input().rstrip().split()))
state = [0 for i in range(n)]
cont = 0
for i in range(k):
if con[i] not in state:
if 0 in state:
for j in range(n):
if state[j] == 0:
state[j] = con[i]
break
else:
maxi = -1
maxx = 0
for j in range(n):
pan = 0
for x in range(i, k):
if state[j] == con[x]:
if maxi < x:
maxi = x
maxx = j
pan = 1
break
if pan == 0:
maxi = 10000
maxx = j
state[maxx] = con[i]
cont += 1
print(cont)
그리디는 한 번 유형 분석이 필요한 것 같다. 다음 글에서 유형 분석을 하도록 하겠다.
'PS문제풀이' 카테고리의 다른 글
백준 27172-수 나누기 게임(python) (에라토스테네스 아이디어 응용) (0) | 2023.07.29 |
---|---|
백준 2623 음악프로그램 위상정렬 알고리즘 (0) | 2023.07.27 |
[스택심화]17298-오큰수 (0) | 2023.07.12 |
[스택 심화]9935-문자열 폭발 (0) | 2023.07.12 |
그 유명한 N-queen (0) | 2023.07.10 |