Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Aug 25, 2025

🧷 문제 링크

https://www.acmicpc.net/problem/17163

🧭 풀이 시간

180분

👀 체감 난이도

✏️ 문제 설명

정수 MOD와 빈 수열 A가 주어지며, A에 할 수 있는 세 종류의 작업이 주어진다.

  1. A의 맨 뒤에 num을 추가
  2. A의 맨 뒤에 있는 원소 제거 (비어있다면 무시)
  3. A의 맨 뒤에서 최소 몇 개의 수를 선택해야 이 수들을 MOD로 나눴을 때 나머지가 0부터 MOD-1까지 모두 나타나는지?

🔍 풀이 방법

  • 스택
  • TreeSet

어차피 MOD가 작업 횟수보다 크면 답은 항상 -1만 나온다. -> MOD <= Q인 경우만 고려함

0부터 MOD-1까지 스택을 MOD개 만들어놓고 각 스택에는 해당 수가 나온 A에서의 인덱스를 저장해둔다.
이 때 3번 작업에 대한 답은, 만약 0부터 MOD-1까지 안 나온 수가 있다면 -1이고 그렇지 않다면 0부터 MOD-1까지의 스택에서 가장 큰 인덱스 중 최솟값 v에 대해, (현재까지 나온 수의 개수) - v가 답이 된다.

이걸 빨리 구하려고, TreeSet으로 최신 인덱스들만 담아놓도록 구현했다.

⏳ 회고

최근 본 문제들 중에 제일 싫었던 문제임
채점 순서도 랜덤이라 몇 퍼에서 틀렸는지가 의미없고,
스택 쓰니까 메모리 초과인데 vector쓰면 맞음.
C++로 짜니까 맞는데 Java로 짜니까 틀림.

@oncsr oncsr self-assigned this Aug 25, 2025
@oncsr oncsr added success 👍 해설을 보지 않고 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때 labels Aug 25, 2025
@ShinHeeEul ShinHeeEul merged commit 7c1d1e0 into main Aug 25, 2025
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

success 👍 해설을 보지 않고 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants