N구 짜리 멀티탭에 여러 전기용품을 번갈아 사용할때,
멀티탭에서 코드를 최소한으로 뽑는 경우를 찾는 문제입니다.
다음의 경우로 문제를 나눠 해결하였습니다.
continue
continue
def main():
holes, _ = map(int, input().split())
orders = list(map(int, input().split()))
multitap = []
pull_out = 0
for idx, device in enumerate(orders):
if device in multitap:
continue
elif len(multitap) < holes:
multitap.append(device)
continue
multitap_idxs = []
for plug in multitap:
if plug in orders[idx:]:
multitap_idxs.append(orders[idx:].index(plug))
else:
multitap_idxs.append(101)
change_idx = max(range(len(multitap_idxs)), key=lambda i: multitap_idxs[i])
multitap[change_idx] = device
pull_out += 1
print(pull_out)
if __name__ == "__main__":
main()
방법은 간단한데 생각보다 코드 작성할 때 헷갈리는 부분이 많았습니다.
multitap_idxs
리스트는 멀티탭의 각 구 별 다음에 사용하게 될 순서를 나타냅니다.
이때 최대값(제일 늦게 사용 할 전기용품)의 인덱스를 가져와 멀티탭의 교체할 인덱스로 사용하는데
argmax
가 필요하여 위와 같이 max
를 이용해 구현 하였습니다.