Skip to content

Commit

Permalink
Merge pull request #188 from wellFoundedDevelopers/byeonghee/47week
Browse files Browse the repository at this point in the history
[소병희] 알고스팟, A와 B 2, 회장뽑기, 입국심사
  • Loading branch information
bngsh authored Oct 8, 2023
2 parents 3f8b9de + 34d3e4e commit 036921a
Show file tree
Hide file tree
Showing 4 changed files with 171 additions and 0 deletions.
37 changes: 37 additions & 0 deletions src/main/kotlin/byeonghee/week47/A와 B 2.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package byeonghee.week47

class 소병희_AB2 {

companion object {
fun solve() = with(System.`in`.bufferedReader()) {
val s = readLine()
val t = readLine()

fun checkAB(sb: StringBuilder): Boolean {
if (s == sb.toString()) return true
if (s.length == sb.length) return false

if (sb.last() == 'A') {
val nsb = StringBuilder(sb)
nsb.deleteCharAt(nsb.lastIndex)
if (checkAB(nsb)) return true
}
if (sb.first() == 'B') {
val nsb = StringBuilder(sb)
nsb.deleteCharAt(0)
nsb.reverse()
if (checkAB(nsb)) return true
}

return false
}

val sb = StringBuilder(t)
println(if (checkAB(sb)) 1 else 0)
}
}
}

fun main() {
소병희_AB2.solve()
}
53 changes: 53 additions & 0 deletions src/main/kotlin/byeonghee/week47/알고스팟.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package byeonghee.week47

import java.util.*

class 소병희_알고스팟 {

companion object {
const val INF = 99_999
const val WALL = 1
const val ROOM = 0

val dr = intArrayOf(0, 1, 0, -1)
val dc = intArrayOf(1, 0, -1, 0)

fun solve() = with(System.`in`.bufferedReader()) {
val (n, m) = readLine().split(" ").map { it.toInt() }
val maze = Array(m) { IntArray(n) }
val dist = Array(m) { IntArray(n) { INF } }
val pq = PriorityQueue<IntArray> { a, b -> a[0] - b[0] }

repeat(m) { i ->
readLine().forEachIndexed { j, v ->
maze[i][j] = v.digitToInt()
}
}

pq.add(intArrayOf(0, 0, 0))
while(pq.isNotEmpty()) {
val (d, r, c) = pq.poll()
if (dist[r][c] <= d) continue
dist[r][c] = d

for(dir in 0 until 4) {
val nr = r + dr[dir]
val nc = c + dc[dir]
if (nr !in maze.indices || nc !in maze[0].indices) continue
if (maze[nr][nc] == ROOM) {
pq.add(intArrayOf(d, nr, nc))
}
else if (maze[nr][nc] == WALL) {
pq.add(intArrayOf(d+1, nr, nc))
}
}
}

println(dist[m-1][n-1])
}
}
}

fun main() {
소병희_알고스팟.solve()
}
20 changes: 20 additions & 0 deletions src/main/kotlin/byeonghee/week47/입국심사.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package byeonghee.week47

class 소병희_입국심사 {
fun solution(n: Int, times: IntArray): Long {
times.sort()

var lb = 0L
var ub = times.last() * n.toLong()
var mid = 0L

while(lb + 1 < ub) {
mid = lb + (ub - lb) / 2
val cost = times.sumOf { mid / it }
if (cost < n) lb = mid
else ub = mid
}

return ub
}
}
61 changes: 61 additions & 0 deletions src/main/kotlin/byeonghee/week47/회장뽑기.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package byeonghee.week47

class 소병희_회장뽑기 {

companion object {
const val INF = 987_654_321

fun solve() = with(System.`in`.bufferedReader()) {
val n = readLine().toInt()
val adj = Array(n) { i -> IntArray(n) { j -> if (i == j) 0 else INF }}

var a = 0
var b = 0

readLine().split(" "). let {
a = it[0].toInt()
b = it[1].toInt()
}

while(a != -1) {
adj[a-1][b-1] = 1
adj[b-1][a-1] = 1

readLine().split(" "). let {
a = it[0].toInt()
b = it[1].toInt()
}
}

for(k in 0 until n) {
for(i in 0 until n) for(j in 0 until n) {
val before = adj[i][j]
val detour = adj[i][k] + adj[k][j]
if (detour < before) adj[i][j] = detour
}
}

var minScore = 987_654_321
val candidates = ArrayDeque<Int>()

for(i in 0 until n) {
val score = adj[i].maxOf{it}
if (score < minScore) {
minScore = score
candidates.clear()
candidates.add(i + 1)
}
else if (score == minScore) {
candidates.add(i + 1)
}
}

println("$minScore ${candidates.size}")
println(candidates.joinToString(" "))
}
}
}

fun main() {
소병희_회장뽑기.solve()
}

0 comments on commit 036921a

Please sign in to comment.