SW Test/Programmers
[Programmers] Lv1.์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ(kotlin)
An effort will never betray ๐
2022. 7. 23. 00:35
๋ฐ์ํ
๋ฌธ์
์์
ํ์ด
- ํด๋น ๋ฌธ์ ๋ map, set ๋ฑ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ์กฐํฉํ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ ๋ฌธ์ ์ ๋๋ค.
- ๋จผ์ , id_report_set์ id์ ํ๋์ set์ ๊ด๋ฆฌํ ์ ์๋ map์ ์์ฑํฉ๋๋ค.
- ์ดํ report์ ํ๋์ฉ ํ์ํ๋ฉด์ id_report_set์ ๊ฐ์ ์ธํ ํฉ๋๋ค. ์ค๋ณต๋ ์ฌ๋์ ์๋์ผ๋ก ์ ๊ฑฐ๊ฐ ๋ฉ๋๋ค.
- reported_count์๋ id ๋ง๋ค ์ ๊ณ ๋ฐ์ ํ์๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ํด๋น ๊ฐ์ id_report_set์ ํ์ํ์ฌ id๊ฐ ์ ๊ณ ํ ์ฌ๋๋ค์ ๋ด์ value ๊ฐ์ผ๋ก ํ๋์ฉ ํ์๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
- ๋ง์ง๋ง์ผ๋ก id_list๋ฅผ ํ์ํ๋ฉด์ id๊ฐ ์ ๊ณ ํ ์ฌ๋๋ค ์ค ๊ฒฐ๊ณผ ๋ฉ์ผ์ ๋ฐ์ ์ฌ๋๋ค์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
fun solution(id_list: Array<String>, report: Array<String>, k: Int): IntArray {
var answer = IntArray(id_list.size)
val id_report_set = mutableMapOf<String, Set<String>>().apply {
id_list.forEach {
put(it, setOf<String>())
}
}
report.forEach {
val str = it.split(" ")
id_report_set.put(str[0], id_report_set.get(str[0])!! + setOf(str[1]))
}
val reported_count = mutableMapOf<String, Int>()
for (elem in id_report_set) {
val idset = elem.value
idset.forEach {
reported_count.put(it, (reported_count.get(it) ?: 0) + 1)
}
}
id_list.forEachIndexed { index, elem ->
val idset = id_report_set.get(id_list.get(index))!!
answer[index] = idset.filter { reported_count.get(it)!! >= k }.size
}
return answer
}
- ์์ฒ๋ผ ํ ์๋ ์์ง๋ง kotlin์ ๋ค์ํ ํจ์๋ค์ ์ ์๊ณ ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ฉ์๋ ์ฒด์ด๋๋ง ์ฌ์ฉํ์ฌ ํ ์ ์์ต๋๋ค!! ๐
- distinct, groupBy, flatten ๋ชจ๋ฅด๋ ๋ฉ์๋๋ค์ด ๋ง์๊ธฐ์ ์ ๊ธฐ๋กํด ๋ก์๋ค~~
fun solution2(id_list: Array<String>, report: Array<String>, k: Int): IntArray =
report.distinct().map { it.split(" ") }
.groupBy { it[1] }
.map { it.value }
.filter { it.size >= k }
.flatten()
.groupBy { it[0] }
.run { id_list.map { get(it)?.size ?: 0 }.toIntArray() }
์ฐธ๊ณ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ kotlin์ ํน์ฑ์ ๋ง๊ฒ ํจ์๋ฅผ ๋ง์ด ์ตํ์ ๐ฝ
- https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/group-by.html
๋ฐ์ํ