//숫자 짝꿍
class NumberMate {
fun solution(X: String, Y: String): String {
val answer = StringBuilder()
val arrX = IntArray(10)
val arrY = IntArray(10)
countNumInArr(X, arrX)
countNumInArr(Y, arrY)
for (i in arrX.indices.reversed()) {
while (arrX[i] >= 1 && arrY[i] >= 1) {
arrX[i]--
arrY[i]--
answer.append(i)
}
}
val result = if (answer.toString() == "") {
"-1"
} else if (answer.toString().startsWith("0")) {
"0"
} else {
answer.toString()
}
return result
}
private fun countNumInArr(str: String, arr: IntArray) {
for (element in str) {
val index = element - '0'
arr[index]++
}
}
}
두 숫자 조합에서 같은 숫자끼리만으로 제일 높은 숫자 조합을 만드는 문제이다.
countNumInArr를 만들어서 문자열에 있는 숫자를 가져와
해당 인덱스에 카운트를 해준다.
arrX를 값이 있는 인덱스 순서로 for문을 돌려주어,
해당 인덱스에 arrX와 arrY가 1보다 높은 값을 가지고 있다면,
각 배열을 1씩 차감해주고,
해당 i 값을 answer StringBulder에 append 해준다.
그 후 값이 비어 있거나, 0으로 되어 있을 때, 혹은 아닐 때를 조건문으로 나누어주어
반환한다.
성격 유형 검사하기
//성격 유형 검사하기
class TestYourPersonalityType {
//유형 점수 매기기 맵
val categories = mutableMapOf(
'R' to 0,
'T' to 0,
'C' to 0,
'F' to 0,
'J' to 0,
'M' to 0,
'A' to 0,
'N' to 0
)
fun solution(survey: Array<String>, choices: IntArray): String {
//선택지에 따른 점수
val scores = mapOf(
1 to 3,
2 to 2,
3 to 1,
4 to 0,
5 to 1,
6 to 2,
7 to 3
)
survey.forEachIndexed { i, s ->
val choice = choices[i]
var categoryStr: Char
if(choice < 4) {
//선택지가 비동의 일때
//문자열에 첫번째 문자
categoryStr = s[0]
} else if(choice > 4) {
//선택지가 동의 일때
//문자열에 두번째 문자
categoryStr = s[1]
} else {
//선택지가 4번일때
//어떤 유형도 점수를 얻지 못한다.
return@forEachIndexed
}
//해당 카테고리에 선택지에 따른 점수 넣어주기
categories[categoryStr] = categories[categoryStr]!! + scores[choice]!!
}
val result = StringBuilder()
.append(compareCategory('R', 'T'))
.append(compareCategory('C', 'F'))
.append(compareCategory('J', 'M'))
.append(compareCategory('A', 'N')).toString()
return result
}
//두개의 카테고리 중 점수가 더 높은 카테고리를 반환하는 메서드
//만약 점수가 같다면, 사전순으로 반환
private fun compareCategory(firstCate: Char, secondCate: Char): Char {
val firstScore = categories[firstCate] ?: 0
val secondScore = categories[secondCate] ?: 0
return if(firstScore > secondScore) {
firstCate
} else if(firstScore < secondScore) {
secondCate
} else {
(firstCate + secondCate.toString()).toSortedSet().first()
}
}
}
유형 별 맵(categories)과 선택지에 따른 점수 맵(scores)를 미리 만들어 둔다.