• Quiz
  • Test Cases
  • Solution
  • Solution 1
  • Solution 2
Other Data Structures 중급

큐지우기

큐(Queue)를 나타내는 정수배열(큐의 앞에서 뒤 순서로) arr이 제공됩니다. 또한 정수 x가 주어지며 다음 3단계 프로세스를 수행해야 합니다.

  1. 큐에서 x개의 요소를 꺼냅니다 (만약 큐에 x개 보다 적은 요소가 있을 경우 모두 꺼냅니다)
  2. 꺼낸 요소들 중 가장 큰 값을 가진 요소를 찾아서 제거합니다 (가장 큰 값이 여러 개 있는 경우 먼저 튀어나온 요소를 제거하세요).
  3. 튀어나온 나머지 요소들은 값을 1씩 줄여서 각각 튀어나온 순서대로 다시 큐에 집어 넣습니다. 만약 요소의 값이 0이면 그대로 큐에 넣습니다.

x개의 정수들로 이루어진 출력배열을 계산하세요. 출력배열에는 두번째 프로세스에서 제거된 요소의 인덱스(1부터 시작하는 인덱스)를 포함합니다.

예제 1

입력

arr = [1, 2, 2, 3, 4, 5]  
x = 5

출력

[5, 6, 4, 1, 2]

처음에 큐는 [1, 2, 2, 3, 4, 5] (앞에서 뒤로)입니다.

첫번째 프로세스에서 처음 5개의 요소가 큐에서 튀어나와 [5]만 남습니다. 튀어나온 요소 중 가장 큰 요소는 원래 배열의 인덱스 5에 있던 4입니다. 그런 다음 나머지 요소는 1씩 줄어들고 큐에 다시 추가되며, [5, 0, 1, 1, 2]입니다.

두번째 프로세스에서 5개의 요소가 모두 큐에서 튀어나와 가장 큰 요소는 원래 배열에서 인덱스 6인 5입니다. 나머지 요소는 0을 제외하고 1씩 줄어든 후 큐에 다시 추가되어 [0, 0, 0, 1]이 됩니다.

다음 프로세스에서 4개의 요소가 모두 큐에서 튀어 나옵니다. 가장 큰 값은 원래 배열에서 인덱스 4에있던 3의 초기 값을 가진 1입니다. 나머지 요소는 큐에 다시 추가되어 [0, 0, 0]이 됩니다.

네번째 프로세스에서 3개의 요소가 모두 큐에서 튀어 나옵니다. 모두 동일한 값을 가지고 있기 때문에 원래 배열의 인덱스 1에 있던 초기값이 1인 요소를 제거합니다. 나머지 요소는 큐에 다시 추가되어 [0, 0]이 됩니다.

마지막 프로세스에서 두 요소가 큐에서 모두 튀어 나옵니다. 먼저 튀어나온 것을 제거한 후 원래 배열에서 인덱스 2에 있던 초기값 2인 요소를 제거합니다.

Test Case 1

Input

arr = [1, 2, 2, 3, 4, 5]
x = 5

Output

[5, 6, 4, 1, 2]

Test Case 2

Input

arr = [1, 2, 2, 3, 4]
x = 5

Output

[5, 4, 1, 2, 3]

Test Case 3

Input

arr = [0, 0, 0, 0, 0]
x = 5

Output

[1, 2, 3, 4, 5]

Test Case 4

Input

arr = [6, 5, 4, 3, 2, 1]
x = 2

Output

[1, 3]

Test Case 5

Input

arr = []
x = 0

Output

[]
  • My Answer
  • Lecture
  • Output
                                            
W+코딩 알고리즘 강의

프로그래밍을 이해하는데 꼭 필요한 알고리즘을 쉽고 빠르게 배울 수 있도록 준비한 강의 입니다.

코딩테스트를 준비하시는 분, 알고리즘에 대해서 전반적으로 공부하고자 하는 분들을 위해 꼭 필요한 토픽을 모아서 기초부터 고급 문제까지 단계적으로 구성되어 있습니다.

프로그래밍 언어는 JavaScript · Java · Python · C++ · C# 을 이용하여 브라우저에서 직접 프로그램을 작성 및 실행할 수 있으며, 알고리즘 강의를 통해 주어진 문제를 응용하여 다양한 솔루션을 작성하고 온라인에서 바로 테스트하면서, 알고리즘에 대해 좀 더 깊은 이해를 도와 드립니다.

코딩테스트 문제해설

Light Mode

온라인으로 코딩문제 풀면서 학습하는 사이트를 찾고 계신가요? W+코딩에서는 코딩공부 하면서 헷갈리는 부분을 알기 쉽고 정확하게 알려드립니다.

알고리즘 코드해설

Dark Mode

바이너리트리, 링드리스트, 그래프, 다이나믹 프로그래밍, 그리디 등등등... JavaScript, Java, Python, C++, C# 솔루션을 정확하고 알기 쉽게 설명해 드립니다.