[Baekjoon] 11866 - πŸ”—μš”μ„Έν‘ΈμŠ€ 문제 0

ChobbyΒ·2023λ…„ 11μ›” 17일
1

Baekjoon

λͺ©λ‘ 보기
84/108

πŸ˜€λ¬Έμ œ

μš”μ„Έν‘ΈμŠ€ λ¬Έμ œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

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>

🀣좜처

  • 문제λ₯Ό λ§Œλ“  μ‚¬λžŒ: baekjoon

πŸ˜ƒμ•Œκ³ λ¦¬μ¦˜ λΆ„λ₯˜

  • κ΅¬ν˜„
  • 자료 ꡬ쑰
  • 큐

πŸ˜„λ‚˜μ˜ν’€μ΄

λΆ„λ₯˜ μžμ²΄κ°€ μŠ€νƒ, 큐, 덱(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(", ")}>`)
profile
λ‚΄ 지식을 κ³΅μœ ν•  수 μžˆλŠ” λŒ€λ‹΄ν•¨

0개의 λŒ“κΈ€