https://programmers.co.kr/learn/courses/30/lessons/72412
다른 사람들의 풀이를 보면 Data로 값을 저장하는 것이 아닌
"java-backend-" 와 같이 string 을 만들어서 저장하는 방법을 많이 사용했다.
하지만 kotlin의 data class 는 값이 같으면 같은 객체를 나타낼 수 있으므로 좀 더 쉽게 값들을 저장하고 관리할 수 있다.
비슷한 java class 로는 java 14부터 제공해주는 record class 가 있다.
import java.util.*
val map = HashMap<Data, ArrayList<Int>>()
class Solution {
fun solution(info: Array<String>, query: Array<String>): IntArray {
var answer: IntArray
var tempAnswer = arrayListOf<Int>()
info.forEach {
val st = StringTokenizer(it)
val language = st.nextToken()
val job = st.nextToken()
val career = st.nextToken()
val soulFood = st.nextToken()
val score = st.nextToken().toInt()
for (i in arrayListOf("-", language)) {
for (j in arrayListOf("-", job)) {
for (k in arrayListOf("-", career)) {
for (l in arrayListOf("-", soulFood)) {
val data = Data(i, j, k, l)
if (map.containsKey(data)) {
val arrayList = map[data]
arrayList!!.add(score)
map[data] = arrayList
} else {
map[data] = arrayListOf(score)
}
}
}
}
}
}
for (i in map.keys) {
val arrayList = map[i]
arrayList?.sort()
}
query.forEach {
val st = it.split(" ")
val language = st[0]
val job = st[2]
val career = st[4]
val soulFood = st[6]
val score = st[7].toInt()
val checkArrayList = map[Data(language, job, career, soulFood)]
if (checkArrayList != null) {
var start = 0
var end = checkArrayList!!.lastIndex
while (start <= end) {
var mid = (start + end) / 2
if (checkArrayList[mid] < score) {
start = mid + 1
} else {
end = mid - 1
}
}
tempAnswer.add(checkArrayList.size - start)
} else {
tempAnswer.add(0)
}
}
answer = tempAnswer.toIntArray()
return answer
}
}
data class Data(
val language: String,
val job: String,
val career: String,
val soulFood: String
)
'개발자 > algorithm' 카테고리의 다른 글
백준 4779번 : 칸토어 집합 (kotlin) (0) | 2021.08.28 |
---|---|
HackerRank, Binary Numbers (Java) (0) | 2021.01.25 |
백준 19279번 : 최대 힙 (java) (0) | 2021.01.12 |
LeetCode, Valid Parentheses (Java) (0) | 2021.01.09 |
LeetCode, Rotate Image (Java) (0) | 2021.01.08 |