Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Week7] 강동호: 쇠막대기, 크리스마스 선물, 프린터 큐, 요세푸스 문제, 스택 수열 #33

Merged
merged 7 commits into from
Jul 2, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions src/7week/dongho/괄호의 값.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package `7week`.dongho

import java.io.*
import java.util.*

fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val string = br.readLine()
var flag = false
var answer: Long = 0
var value = 1
val stack = Stack<Char>()
for (i in 0 until string.length) {
if (string[i] == '(') {
stack.add(string[i])
value *= 2
}
if (string[i] == '[') {
stack.add(string[i])
value *= 3
}
if (string[i] == ')') {
if (stack.empty() || stack.peek() !== '(') {
flag = true
break
}
if (string[i - 1] == '(') {
answer += value.toLong()
}
stack.pop()
value /= 2
} else if (string[i] == ']') {
if (stack.empty() || stack.peek() !== '[') {
flag = true
break
}
if (string[i - 1] == '[') {
answer += value.toLong()
}
stack.pop()
value /= 3
}
}
if (flag || !stack.empty()) {
println(0)
} else {
println(answer)
}
}
26 changes: 26 additions & 0 deletions src/7week/dongho/쇠막대기.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package `7week`.dongho

import java.io.*
import java.util.*

fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val stack: Stack<Int> = Stack()
var i = 1
println(br.readLine().sumOf {
val result = if (it == '(') {
stack.push(i)
0
} else {
if (i - 1 == stack.peek()) {
stack.pop()
stack.size
} else {
stack.pop()
1
}
}
i++
result
})
}
29 changes: 29 additions & 0 deletions src/7week/dongho/스택 수열.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package `7week`.dongho

import java.io.*
import java.util.*

fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val N = br.readLine().toInt()
val queue = LinkedList<Int>()
val answer = LinkedList<Char>()
repeat(N) {
queue.add(br.readLine().toInt())
}
val stack = Stack<Int>()
repeat(N) {
stack.push(it + 1)
answer.add('+')
while (queue.isNotEmpty() && stack.isNotEmpty() && stack.peek() == queue.peek()) {
stack.pop()
queue.poll()
answer.add('-')
}
}
if (stack.isNotEmpty()) {
println("NO")
} else {
println(answer.joinToString("\n"))
}
}
23 changes: 23 additions & 0 deletions src/7week/dongho/요세푸스 문제.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package `7week`.dongho

import java.io.*
import java.util.*

fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val (N, K) = br.readLine().split(" ").map { it.toInt() }
val queue: Queue<Int> = LinkedList(IntRange(1, N).toList())
var i = 1
val answer = LinkedList<Int>()
while (queue.isNotEmpty()) {
val temp = queue.poll()
if (i == K) {
i = 1
answer.add(temp)
} else {
queue.add(temp)
i++
}
}
println("<${answer.joinToString(", ")}>")
}
26 changes: 26 additions & 0 deletions src/7week/dongho/크리스마스 선물.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package `7week`.dongho

import java.io.*
import java.util.*

fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
var st: StringTokenizer
val N = br.readLine().toInt()
val pq = PriorityQueue(Collections.reverseOrder<Int>())
repeat(N) {
st = StringTokenizer(br.readLine())
val a = st.nextToken().toInt()
if (a == 0) {
if (pq.isEmpty()) {
println(-1)
} else {
println(pq.poll())
}
} else {
repeat(a) {
pq.offer(st.nextToken().toInt())
}
}
}
}
40 changes: 40 additions & 0 deletions src/7week/dongho/프린터 큐.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package `7week`.dongho

import java.io.*
import java.util.*

fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
val printerQueue: Queue<Pair<Int, Int>> = LinkedList<Pair<Int, Int>>()
val N = br.readLine().toInt()
for (i in 0 until N) {
val select = br.readLine().split(" ")[1].toInt()
val docList: List<Pair<Int, Int>> = br.readLine().split(" ").mapIndexed { index, v -> Pair(v.toInt(), index) }
printerQueue.addAll(docList)

var printCnt = 0
var check: Boolean
var print: Pair<Int, Int>
do {
check = true
print = printerQueue.poll()
for (afterPrint in printerQueue) {
if (afterPrint.first > print.first) {
check = false
break
}
}
if (check) {
printCnt++
} else {
printerQueue.add(print)
}
} while (!printerQueue.isEmpty() && !(check && print.second === select))

bw.write("$printCnt\n")
printerQueue.clear()
}
bw.flush()
bw.close()
}