728x90
1700번: 멀티탭 스케줄링
기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전
www.acmicpc.net
📄 문제개요
- 전기 기구가 있고, 멀티탭의 플러그 개수가 정해져 있을때, 모든 전기기구를 주어진 순서에따라서 멀티탭 플러그에 꼽아서 사용해야하는데, 뽑았다가 빼야하는 최소 개수를 구하여라.
🤔 문제분석
- 그리디 문제로 여러가지를 처음에 생각해보았고, 아이디어가 떠올리지 않아서, 정답을 찾아보았습니다.
- 전기기구를 뽑을때 출연빈도가 낮아야 하는 전기기구를 뽑아야한다.
- 가장 출연빈도가 높은 순으로 뽑는다.
- 현재 연결해야하는 전기기구부터, 연결해야하는 멀티탭의 콘센트 수 까지의 전기기구 까지를 보아, 그중에 없는 전기기구를 뽑는다.
📝 의사코드
- 콘센트에 전기기구가 하나라도 비어있다면 전기기구를 연결한다.
- 콘센트에 전기기구가 꽉찼다면 전기기구를 하나 빼, 자기자신을 연결한다.
- 전기기구를 하나 빼는 방법은 연결된 콘센트중에서 가장 나중에 연결될 전기기구를 찾는다.
- 전기 기구를 빼고 연결할때 카운팅을 한다.
- 카운팅을 출력한다.
💻 코드
import sys
input = sys.stdin.readline
N, K = map(int, input().split())
products = list(map(int, input().split()))
multi_tap = set()
ans = 0
for i in range(len(products)):
if products[i] in multi_tap: # 이미 물품이 멀티탭에 있는경우
continue
if len(multi_tap) == N: # 멀티탭의 수가 꽉찬경우 (하나를빼서 현재 물품을 꽂아야한다.)
max_idx = -1
del_product = 101
for p in multi_tap:
try:
idx = products[i:].index(p) # 현재위치로부터 가장 멀리있는 인덱스 찾기 ( 가장 나중에 장착될 전기용품 )
except:
# 제일 첫번째꺼가 골라짐.
idx = K
if max_idx < idx:
del_product = p
max_idx = idx
ans += 1
multi_tap.discard(del_product)
multi_tap.add(products[i])
print(ans)
🎯 피드백 및 개선사항
- 해당 문제를 시간안에 풀지 못하였고, 어떤 아이디어가 있을까 인터넷에 검색해보았습니다.
- 운영체제 페이징 스케줄링 알고리즘 중 LRU 라는 알고리즘이 위의 문제의 해결 방안법과 비슷합니다.
페이징 스케줄링 으로 콘센트에 연결된 전기기구 중에서 가장 나중에 연결될 전기기구를 지금 당장 뺀다. 운영체제에서의 페이징 교체 알고리즘으로, LRU ( Least Recently Used ) 알고리즘으로, 가장 오랫동안 참조되지 않은 페이지를 교체 대상으로 선택한다.
❓다른사람은 어떻게 풀었을까?
- 모두 비슷한 방법으로 해결 하였습니다.
n, k = map(int,input().split())
arr = list(map(int,input().split()))
plug = []
c = 0
for i in range(k):
if arr[i] in plug:
continue
if len(plug)<n:
plug.append(arr[i])
continue
idxs = []
for j in range(n):
try:
idxs.append(arr[i:].index(plug[j]))
except:
idxs.append(101)
plug[idxs.index(max(idxs))] = arr[i]
c += 1
print(c)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 23843번 : 콘센트 (0) | 2023.11.30 |
---|---|
[백준] 11000번 : 강의실배정 (1) | 2023.11.29 |
[백준] 16681번 : 등산 (2) | 2023.11.27 |
[백준] 11066번 : 파일 합치기 (2) | 2023.11.19 |
[백준] 1106번 : 호텔 (1) | 2023.11.19 |