μμΈνΈμ€ λ¬Έμ λ λ€μκ³Ό κ°λ€.
1λ²λΆν° Nλ²κΉμ§ Nλͺ μ μ¬λμ΄ μμ μ΄λ£¨λ©΄μ μμμκ³ , μμ μ μ K(β€ N)κ° μ£Όμ΄μ§λ€. μ΄μ μμλλ‘ Kλ²μ§Έ μ¬λμ μ κ±°νλ€. ν μ¬λμ΄ μ κ±°λλ©΄ λ¨μ μ¬λλ€λ‘ μ΄λ£¨μ΄μ§ μμ λ°λΌ μ΄ κ³Όμ μ κ³μν΄ λκ°λ€. μ΄ κ³Όμ μ Nλͺ μ μ¬λμ΄ λͺ¨λ μ κ±°λ λκΉμ§ κ³μλλ€. μμμ μ¬λλ€μ΄ μ κ±°λλ μμλ₯Ό (N, K)-μμΈνΈμ€ μμ΄μ΄λΌκ³ νλ€. μλ₯Ό λ€μ΄ (7, 3)-μμΈνΈμ€ μμ΄μ <3, 6, 2, 7, 5, 1, 4>μ΄λ€.
Nκ³Ό Kκ° μ£Όμ΄μ§λ©΄ (N, K)-μμΈνΈμ€ μμ΄μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
첫째 μ€μ Nκ³Ό Kκ° λΉ μΉΈμ μ¬μ΄μ λκ³ μμλλ‘ μ£Όμ΄μ§λ€. (1 β€ K β€ N β€ 1,000)
μμ μ κ°μ΄ μμΈνΈμ€ μμ΄μ μΆλ ₯νλ€.
μμ μ
λ ₯ 1
7 3
μμ μΆλ ₯ 1
<3, 6, 2, 7, 5, 1, 4>
λΆλ₯ μμ²΄κ° μ€ν, ν, λ±(Deque
) μ΄λΌ κ·Έλλ§ μ΄μΈλ¦¬λ λ± μλ£κ΅¬μ‘°λ‘ μΌμ§λ§, μ΄ λ¬Έμ λ μν μ°κ²° 리μ€νΈ
μλ£ κ΅¬μ‘°λ‘ νμ΄νλκ² κ°μ₯ μ΄μμ μ΄λΌ μκ°νλ€. μμ¬μμ΄ λ§μ΄ λ¨λ λ¬Έμ
class Node {
left = undefined
right = undefined
constructor(val, idx) {
this.value = val
this.idx = idx
}
}
class Deque {
position = undefined
size = 0
nodes = []
constructor(limit) {
this.limit = limit
}
insert(val, idx) {
const curNode = new Node(val, idx)
if(!this.position) this.position = curNode
this.nodes.push(curNode)
this.size += 1
if(idx === 0) return
const prevNode = this.nodes[idx-1]
if(idx === this.limit-1) {
curNode.right = this.nodes[0]
this.nodes[0].left = curNode
}
curNode.left = prevNode
prevNode.right = curNode
}
pop(num) {
let curNode = this.position
const idx = this.size === this.limit ? 1 : 0
for(let i = idx ; i < num ; i ++) {
curNode = curNode.right
}
const val = curNode.value
if(curNode?.left) curNode.left.right = curNode?.right
if(curNode?.right) curNode.right.left = curNode?.left
this.position = curNode
this.size -= 1
return val
}
}
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(" ")
const [N, K] = input.map(a => Number(a))
const result = []
const deque = new Deque(N)
for(let i = 1 ; i <= N ; i ++) {
deque.insert(i, i-1)
}
while(deque.size) {
const popedItem = deque.pop(K)
result.push(popedItem)
}
console.log(`<${result.join(", ")}>`)