Skip to content

251127 : [BOJ 17612] 쇼핑몰#2187

Open
pinkkj wants to merge 1 commit intomainfrom
pinkkj/251127
Open

251127 : [BOJ 17612] 쇼핑몰#2187
pinkkj wants to merge 1 commit intomainfrom
pinkkj/251127

Conversation

@pinkkj
Copy link
Contributor

@pinkkj pinkkj commented Nov 27, 2025

🚀 이슈 번호

Resolve: {#2187}

🧩 문제 해결

스스로 해결:

🔎 접근 과정

문제 해결을 위한 접근 방식을 설명해주세요.

  • 🔹 heapq를 사용해서 접근
  • 🔹 먼저 처음에 아무도 계산하고 있지 않을때는 사람들 그냥 보냄(최소 힙에 추가) -> 돌아가면서 가장 적은 시간이 남은 사람 pop -> for 문 돌면서 아직 계산중인 사람들 남은시간을 갱신(원래 시간 - pop 한 사람이 쓴 시간) -> 새로운 사람 heap에 넣기
  • 문제: 시간복잡도가 커짐 + 사람이 계산 끝나는 거랑 계산하러 들어가는걸 같은 heap으로 관리하니 조건을 맞추지 못함. -> 해결 위해서는 남은 시간 갱신X heap에 넣을때 경과한 시간 기준으로 넣기!! + 새로운 사람 넣는거랑 계산 다한 사람 빼는 걸 분리

⏱️ 시간 복잡도

시간 복잡도 분석을 작성해주세요.
최악의 경우 수행 시간은 어느 정도인지 분석합니다.

  • Big-O 표기법: O(N^2 * logN) -> O(N*logN)
  • **이유: **

💻 구현 코드

import heapq
import sys
input = sys.stdin.readline

N, K = map(int, input().split())
customers = [tuple(map(int, input().split())) for _ in range(N)]  # (id, w)

pq = []           # (finish_time, counter_idx, customer_id)
exit_list = []    # (finish_time, -counter_idx, id)

cnt = min(N, K)

# 처음 K명 계산대 배치
for i in range(cnt):
    cid, w = customers[i]
    heapq.heappush(pq, (w, i+1, cid))  # 계산대 1~K

next_idx = cnt  # 다음 고객 index

# K명 이후 고객 처리
while next_idx < N:
    finish_time, counter, cid = heapq.heappop(pq)
    exit_list.append((finish_time, -counter, cid))

    new_id, new_w = customers[next_idx]
    heapq.heappush(pq, (finish_time + new_w, counter, new_id))
    next_idx += 1

# 계산대에 남은 고객 처리
while pq:
    finish_time, counter, cid = heapq.heappop(pq)
    exit_list.append((finish_time, -counter, cid))

# 퇴장 규칙 정렬
exit_list.sort()

# 정답 계산
ans = 0
for i, (_, _, cid) in enumerate(exit_list, start=1):
    ans += i * cid

print(ans)


@pinkkj pinkkj self-assigned this Nov 27, 2025
@pinkkj pinkkj linked an issue Nov 27, 2025 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

251127 : 코딩테스트

1 participant