[프로그래머스] 성격 유형 검사하기 (Kotlin)

Elen li·2022년 8월 20일
0

성격 유형 검사하기 보러가기

class Solution {
    val choiceMap = mutableMapOf<String, Int>("R" to 0, "T" to 0, "C" to 0, "F" to 0, "J" to 0, "M" to 0, "A" to 0, "N" to 0)
    
    var pairList : MutableList<Pair<String, String>> = mutableListOf()
    
    fun getScore(choiceIdx: Int): Int {
        return when(choiceIdx) {
            1 -> 3
            2 -> 2
            3 -> 1 
            5 -> 1
            6 -> 2 
            7 -> 3
            else -> 0
        }
    }
    
    fun initPairList() {
        pairList.add(Pair("R", "T"))
        pairList.add(Pair("C", "F"))
        pairList.add(Pair("J", "M"))
        pairList.add(Pair("A", "N"))
    }
    
    fun calculateScore(survey: Array<String>, choices: IntArray) {
       choices.forEachIndexed{ i, v ->
            var selectedText = ""
            var selectedScore = 0
            
            if(v < 5) {
                selectedText = survey.get(i).substring(0, 1)
            } else if(v > 4) {
                selectedText = survey.get(i).substring(1, 2)
            }
            
            selectedScore = getScore(v)
            
            choiceMap[selectedText] = choiceMap[selectedText]!! + selectedScore
        } 
    }
    
    fun compairValues() {
        pairList.forEachIndexed { i, e ->
           if(choiceMap[e.first]!! >= choiceMap[e.second]!!) {
               choiceMap.remove(e.second)
           } else {
               choiceMap.remove(e.first)
           }
        }
    }
    
    fun solution(survey: Array<String>, choices: IntArray): String {
        var answer: String = ""   
        
        initPairList()
    
        calculateScore(survey, choices)
        
        compairValues()

        choiceMap.entries.map{
            answer += it.key
        }
        
        return answer
    }
}

하아..
1. 처음에 List<Map<String, int>> 이런 데이터 형의 배열을 만들어내면 initPairList() 같은 함수가 필요없어질거라 생각했는데 방법을 못 찾았다.
[{"R" : 0, "T": 0}, {"C": 0, "F": 0} ...] 이거 안되나??? T.T

  1. 그럼 일렬로 만든 맵을 쌍을 지어서 어떻게 비교해야 하는가...를 고민하다 만든게 pairList 인데, 그냥 키 값을 내가 고정으로 주면 되는거였다. 왤케 어렵게 생각했을까..ㅎ

  2. 이현빈님 코드 참조해보면 이렇게 줘도 될 것 같다.
    나는 마지막에 값을 비교해서, 필요없는 값을 remove로 지워버린뒤,
    다시 map을 루프 돌려서 answer에 key를 붙히는 방법으로 했는데
    그러다보니 루프를 3번이나 돌려야했다....

아니.. Map의 장점이 무엇인가! "key"값으로 바로 "value"를 얻을 수 있다는건데!!!!
이걸 루프를 돌려서 찾아서 지우고 남은 key만 쓴다? 왜????????????
보고나니 한심함ㅎ

result = if(map.getValue('R') >= map.getValue('T')) "R" else "T"
result += if(map.getValue('C') >= map.getValue('F')) "C" else "F"
result += if(map.getValue('J') >= map.getValue('M')) "J" else "M"
result += if(map.getValue('A') >= map.getValue('N')) "A" else "N"

코테를 보면서 함수로 분리시켜가며 보는게 가능할까? 가능하면 좋겠다.

최소 직사각형 문제도 주중에 한 번 봤었는데
지인짜 도오저히 못풀겠어서 풀이를 보고야 말았다...
maxOfNull() 유용하다 유용해...ㅠㅠ
내 나름 머릿속에 넣으려면 정리해둬야겠당

profile
Android, Flutter 앱 개발자입니다.

0개의 댓글