반응형
완전탐색 - 모의고사(programmers.co.kr/learn/courses/30/lessons/42840) 를 풀어봤습니다.
fun Level_1_모의고사(answers: IntArray): IntArray {
var answer = intArrayOf()
val test01 = arrayOf(1, 2, 3, 4, 5)
val test02 = arrayOf(2, 1, 2, 3, 2, 4, 2, 5)
val test03 = arrayOf(3, 3, 1, 1, 2, 2, 4, 4, 5, 5)
val map = hashMapOf<Int, Int>()
answers.forEachIndexed { index, i ->
if (i == test01[index%5]) map[1] = map.getOrDefault(1, 0) + 1
if (i == test02[index%8]) map[2] = map.getOrDefault(2, 0) + 1
if (i == test03[index%10]) map[3] = map.getOrDefault(3, 0) + 1
}
var max = Int.MIN_VALUE
map.entries.forEach {
if (max < it.value) {
max = it.value
}
}
val result = mutableListOf<Int>()
map.entries.forEach {
if (it.value == max) {
result.add(it.key)
}
}
answer = result.toIntArray()
return answer
}
저는 위 처럼 map 이라는 함수를 이용해 값이 있으면 +1을, 없으면 0을 넣는 getOrDefault 를 사용해 첫번째, 두번째, 세번째 사람의 정답 개수를 넣었습니다.
그 후 가장 많이 맞춘 개수를 구했고,
max와 같은 개수의 문제를 맞춘 정답자를 list로 add시켜, 그걸 마지막에 toIntArray() 함수를 통해 결과를 도출했습니다.
그 후, 문제의 정답자의 답안지를 보니, 더 깔끔한 코드가 있어 가져와봤습니다.
fun Level_1_모의고사(answers: IntArray): IntArray {
var answer = intArrayOf()
val test01 = arrayOf(1, 2, 3, 4, 5)
val test02 = arrayOf(2, 1, 2, 3, 2, 4, 2, 5)
val test03 = arrayOf(3, 3, 1, 1, 2, 2, 4, 4, 5, 5)
val map = mutableMapOf(Pair(1, 0), Pair(2, 0), Pair(3, 0))
answers.forEachIndexed { index, i ->
if (i == test01[index%5]) map[1] = map[1]!! + 1
if (i == test02[index%8]) map[2] = map[2]!! + 1
if (i == test03[index%10]) map[3] = map[3]!! + 1
}
val max = map.maxByOrNull { // 프로그래머스 답을 쓸때는 maxBy를 사용해야 합니다.
it.value
}?.value
for (i in 1 .. map.size) {
if (map[i] != max)
map.remove(i)
}
answer = map.toList().sortedWith(compareBy {
it.second
}).toMap().keys.toIntArray()
return answer
}
보시다시피, map에 값을 넣는건 같지만, 미리 key-value를 할당해주고 +1해주는 식으로 구현했습니다.
거기서 maxBy 함수를 이용해 max값을 찾고, max값과 맞지 않다면 remove해줬습니다.
그 후 sortedWith함수를 이용해 정리했고, 그걸 다시 key 순서대로 맞췄습니다.
이게 더 많은 함수도 사용해보고 깔끔한거 같네요.
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
완전탐색 - 카펫 (0) | 2021.02.04 |
---|---|
정렬 - H-index (0) | 2021.01.13 |
정렬 - 가장 큰 수 (0) | 2021.01.12 |
정렬 - K번째 수 (0) | 2021.01.12 |
해시 - 완주하지 못한 선수 (0) | 2020.12.30 |