프로그래머스 알고리즘 Level 1 코틀린 2022 카카오 TECH INTENSHIP 성격 유형 검사하기 문제

2023. 1. 25. 19:24알고리즘/문제

 

https://school.programmers.co.kr/learn/courses/30/lessons/118666

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 - 성공

class Solution {
    fun solution(survey: Array<String>, choices: IntArray): String {
        var answer: String = ""
        val name = arrayOf("R", "T", "C", "F", "J", "M", "A", "N")
        val score = intArrayOf(3, 2, 1, 0, 1, 2, 3)
        val table = LinkedHashMap<String, Int>()
        val surveyM = survey.map { it.chunked(1) }
        val answerList = mutableListOf<String>()
        name.forEach {
            table[it] = 0
        }
        choices.forEachIndexed { i, num ->
            if (num > 4) table[surveyM[i][1]] = score[num - 1] + table[surveyM[i][1]]!!
            else {
                if (num < 4) table[surveyM[i][0]] = score[num - 1] + table[surveyM[i][0]]!!
            }
        }
        for (i in 0..3) {
            when (i) {
                0 -> {
                    when {
                        table["R"]!! > table["T"]!! -> {
                            answerList.add("R")
                        }

                        table["R"]!! < table["T"]!! -> {
                            answerList.add("T")
                        }

                        else -> {
                            answerList.add("R")
                        }
                    }
                }

                1 -> {
                    when {
                        table["C"]!! > table["F"]!! -> {
                            answerList.add("C")
                        }

                        table["C"]!! < table["F"]!! -> {
                            answerList.add("F")
                        }

                        else -> {
                            answerList.add("C")
                        }
                    }
                }

                2 -> {
                    when {
                        table["J"]!! > table["M"]!! -> {
                            answerList.add("J")
                        }

                        table["J"]!! < table["M"]!! -> {
                            answerList.add("M")
                        }

                        else -> {
                            answerList.add("J")
                        }
                    }
                }

                else -> {
                    when {
                        table["A"]!! > table["N"]!! -> {
                            answerList.add("A")
                        }

                        table["A"]!! < table["N"]!! -> {
                            answerList.add("N")
                        }

                        else -> {
                            answerList.add("A")
                        }
                    }
                }
            }
        }
        answer = answerList.joinToString("")
        return answer
    }
}

평가 )

해쉬맵에 각 지표를 넣어서 0으로 초기화시켜 준다.

그리고 선택한 choices array를 하나씩 반복문으로 보는데 

여기서 num이 4 이상이면 해쉬맵에 점수를 3, 2, 1, 0, 1, 2, 3 이렇게 생각하고 index에 맞는 값을 

지표에 맞게 넣었다.

그리고 4번을 반복해서

맨 앞의 지표부터 확인해서 점수를 비교하고 list에 add 한다.

전체적인 코드는 별로인 것 같다.

일단 함수형 활용을 거의 안 했고 when으로 저렇게 분기를 많이 해서 해야 하나 싶다...

그래서 좀 별로다 더 생각해 봐야겠다.