문제
알고리즘
- 반복문을 통해 플레이어를 입력받아 방에 넣어준다.
- 각 방을 돌면서 조건에 합당하면 넣어준다.
- 못 들어간 플레이어가 있다면 새로운 방을 만들어 넣어준다.
- 이름 기준으로 정렬 후 출력한다.
코드
package beakjoon.implementation
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*
import kotlin.math.abs
fun main() {
val rooms: MutableList<Room> = ArrayList()
val br = BufferedReader(InputStreamReader(System.`in`))
val pmInfo = br.readLine().split(" ")
val p = pmInfo[0].toInt()
val m = pmInfo[1].toInt()
for (i in 0 until p) {
//레벨 l
//닉네임 n
val playerInfo = br.readLine().split(" ")
val l = playerInfo[0].toInt()
val nickname = playerInfo[1]
var hasRoom = false
for (room in rooms) {
// 현재 방에 기준이 되는 레벨보다 크거나 작다면
if (!room.isValidLevel(l)) continue
// 이미 방이 찼다면
if (room.isFull) continue
// 방에 멤버 ++
room.member++
// 방에 멤버가 꽉 찼다면
if (room.member == m) {
room.isFull = true // 방이 꽉 참.
}
// 밤에 멤버 정보를 추가
room.peoples.add(Pair(nickname, l))
hasRoom = true // 멤버가 들어감
break
}
// 방에 멤버가 들어가지 못했다면 새로운 방을 만들고 그 방에 현재 멤버를 추가
if (!hasRoom) {
val newRoom = Room(l, m)
newRoom.peoples.add(Pair(nickname, l))
rooms.add(newRoom)
}
}
val sb = StringBuilder()
for (room in rooms) {
// 닉네임 기준으로 정렬
room.peoples.sortWith(compareBy<Pair> { it.nickname})
if (room.isFull) {
sb.append("Started!\n")
} else {
sb.append("Waiting!\n")
}
for (person in room.peoples) {
sb.append(person.level).append(" ").append(person.nickname).append("\n")
}
}
println(sb)
}
class Pair(var nickname: String, var level: Int)
class Room(level: Int, maxv: Int) {
var isFull: Boolean
var member: Int
var level: Int
var peoples: MutableList<Pair>
init {
isFull = maxv == 1
member = 1
this.level = level
peoples = ArrayList()
}
fun isValidLevel(level: Int): Boolean {
val result = abs(this.level - level)
return result <= 10
}
}
github
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 1913번(파이썬): 달팽이 (0) | 2022.08.20 |
---|---|
[programers] 프로그래머스(코틀린) : 가장 먼 노드 (0) | 2022.08.19 |
[baekjoon] 백준 20006번(파이썬): 랭킹전 대기열 (0) | 2022.08.19 |
[baekjoon] 백준 1337번(코틀린): 올바른 배열 (0) | 2022.08.16 |
[baekjoon] 백준 1337번(파이썬): 올바른 배열 (0) | 2022.08.16 |