백준 문제풀이 - 1700번

이형래·2022년 6월 18일
0

백준문제풀이

목록 보기
12/36

백준 문제풀이 - 1700 번


링크 -> https://www.acmicpc.net/problem/1700


1. 요약 및 풀이방법

N구 짜리 멀티탭에 여러 전기용품을 번갈아 사용할때,
멀티탭에서 코드를 최소한으로 뽑는 경우를 찾는 문제입니다.

다음의 경우로 문제를 나눠 해결하였습니다.

  1. 멀티탭에 이미 해당 전기용품이 꽂혀있는 경우,
    그대로 사용하면 되므로 continue
  2. 멀티탭에 꽂혀있진 않지만 빈 자리가 있는 경우,
    빈 자리에 꽂고 나서 continue
  3. 멀티탭에 자리가 꽉 차있는 경우,
    사용하지 않을 예정이거나, 제일 늦게 사용하게 될 전기용품 자리를 교체합니다.

2. Code

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()

3. 학습 내용

방법은 간단한데 생각보다 코드 작성할 때 헷갈리는 부분이 많았습니다.
multitap_idxs 리스트는 멀티탭의 각 구 별 다음에 사용하게 될 순서를 나타냅니다.
이때 최대값(제일 늦게 사용 할 전기용품)의 인덱스를 가져와 멀티탭의 교체할 인덱스로 사용하는데
argmax 가 필요하여 위와 같이 max 를 이용해 구현 하였습니다.


4. 결과

profile
머신러닝을 공부하고 있습니다. 특히 비전 분야에 관심이 많습니다.

0개의 댓글