[문제]

 

[내 코드] -> 틀렸습니다!!

N, K = map(int, input().split())
usage = list(map(int, input().split()))

plug = []

res = 0
for i in range(K):
    if usage[i] in plug:
        continue
    elif len(plug) < N:
        plug.append(usage[i])
    else:
        wait = []
        for j in usage[i:]:
            if j in plug:
                wait.append(j)
                if len(wait) == N:
                    break
        if set(plug) - set(wait):
            obj = (set(plug) - set(wait)).pop()
        else:
            obj = wait[-1]
        plug[plug.index(obj)] = usage[i]
        res += 1

print(res)

- 내가 생각해본 건, 이후 사용할 리스트에서 현재 플러그에 들어 있는 것들을 싹 다 리스트(wait)에 저장한 다음에 가장 나중에 사용하게 될 것을 플러그에 넣는 것이었다

- 그리고 이후 사용할 리스트에 현재 플러그에 끼워진 것이 없으면 그 중 하나를 뽑게 했다 (pop)

- 36% 정도 채점이 되다가 틀렸다고 떴다

- 될 듯하다가 말아버린.. 정답을 봐보았다

 

[개선안]

N, K = map(int, input().split())
scheduling = list(map(int, input().split()))

adaptor = [0] * N
count = 0
scheduling_idx = 0
tmp = 0
tmp_i = 0

for i in scheduling:
    # 멀티탭에 같은 전기용품이 있을 때
    if i in adaptor:
        pass
    # 멀티탭이 아직 채워지지 않았을 때
    elif 0 in adaptor:
        adaptor[adaptor.index(0)] = i
    # 멀티탭에 빈자리 없고 현재 꽂혀 있는 전기용품들과 다를 때
    else:
        for j in adaptor:
            # 현재 꽂혀있는 전기용품이 더 이상 사용되지 않는다면
            if j not in scheduling[scheduling_idx:]:
                tmp = j
                break
            #현재 꽂혀있는 전기용품이 이후에도 사용될 때
            elif scheduling[scheduling_idx:].index(j) > tmp_i:  # 꽂혀있는 것들 중 여러 개가 다시 사용될 때, 더 나중에 사용되는 것을 뽑는다.
                tmp = j
                tmp_i = scheduling[scheduling_idx:].index(j)
        adaptor[adaptor.index(tmp)] = i
        tmp = tmp_i = 0
        count += 1
    scheduling_idx += 1

print(count)

여기 아래 부분을 보면

elif scheduling[scheduling_idx:].index(j) > tmp_i:  # 꽂혀있는 것들 중 여러 개가 다시 사용될 때, 더 나중에 사용되는 것을 뽑는다.
    tmp = j
    tmp_i = scheduling[scheduling_idx:].index(j)

이후에 사용할 물건 중(scheduling[idx:]) 현재 플러그에 꽂혀 있는 것 중(j) 가장 인덱스가 멀리에 있는 것을 찾는다

 

논리는 같은 것 같은데, 왜 내 코드는 안 되고 위 코드는 될까..

 

 

복사했습니다!