❓ 제목
(중략)
검사 결과는 모든 질문의 성격 유형 점수를 더하여 각 지표에서 더 높은 점수를 받은 성격 유형이 검사자의 성격 유형이라고 판단합니다. 단, 하나의 지표에서 각 성격 유형 점수가 같으면, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 검사자의 성격 유형이라고 판단합니다.
질문마다 판단하는 지표를 담은 1차원 문자열 배열 survey와 검사자가 각 질문마다 선택한 선택지를 담은 1차원 정수 배열 choices가 매개변수로 주어집니다. 이때, 검사자의 성격 유형 검사 결과를 지표 번호 순서대로 return 하도록 solution 함수를 완성해주세요.
💡 풀이
class Solution {
fun solution(survey: Array<String>, choices: IntArray): String {
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,
)
for((idx, itm) in choices.withIndex()){ //withIndex 쓰면 for문에서 index값 접근 가능
when(itm){ // 5, 3, 2, 7, 5 (choices의 값)
1, 2, 3 -> {
val key = survey[idx][0].toString() // survey[idx][0]는 Char값이므로 String화
choiceMap[key] = choiceMap[key]!! + (4 - itm)
}
5, 6, 7 -> {
val key = survey[idx][1].toString()
choiceMap[key] = choiceMap[key]!! + (itm - 4)
}
}
}
val answer = with(StringBuilder()) {
append(if(choiceMap["R"]!! < choiceMap["T"]!!) "T" else "R")
append(if(choiceMap["C"]!! < choiceMap["F"]!!) "F" else "C")
append(if(choiceMap["J"]!! < choiceMap["M"]!!) "M" else "J")
append(if(choiceMap["A"]!! < choiceMap["N"]!!) "N" else "A")
toString()
}
return answer
}
}
- 각 성격유형에 맞는 Map을 하나 선언해준다. 각 key값의 value 초기값은 0이다.
- 사용자가 선택한 값 choices 배열을 반복문으로 순회한다. withIndex 메소드를 사용하면 for문에서도 index값에 접근이 가능하다.
- 만약 사용자가 선택한 값이 1, 2, 3 중에 있다면 survey의 0번째 값이 더 우세하다는 뜻이다.
- 때문에 survey의 idx 값의 0번째 값을 key로 선언한다. (이때 survye[idx][0]은 Char이므로 String화 해주어야 한다.)
- choiceMap의 key값은 현재 0으로 choiceMap[key]!! + (4 - itm) 해준다. 문제가 많아질 수록 같은 성격 타입을 검사하며 값이 누적될 수 있으므로 choiceMap[key]를 초반에 더해주고, 4는 잘모르겠음으로 4 - itm 해준다.
- 만약 사용자가 선택한 값이 5, 6, 7 중에 있다면 survey의 1번째 값이 더 우세하다는 뜻이다.
- 때문에 survey의 idx 값의 1번째 값을 key로 선언한다.
- choiceMap의 key값은 현재 0으로 choiceMap[key]!! + (itm - 4) 해준다. 문제가 많아질 수록 같은 성격 타입을 검사하며 값이 누적될 수 있으므로 choiceMap[key]를 초반에 더해주고, 4는 잘모르겠음으로 itm - 4 해준다.
- 만약 사용자가 선택한 값이 1, 2, 3 중에 있다면 survey의 0번째 값이 더 우세하다는 뜻이다.
- answer는 StringBuilder를 with 메소드를 통해 선언한다.
- choiceMap["R"] 값과 choiceMap["T"]값을 비교하여 올바른 값을 return하여 append 메소드를 이용해 추가해준다.
- 이하 다른 타입들도 같은 방식으로 비교한다.
- toString()으로 최종 형변환을 해준다.
이번 문제도 풀이를 보고 풀었지만 문제 파악도 상당한 시간이 걸렸고 풀이도 제법 오래 분석했던 것 같다.
다양한 사람들의 다양한 방법 중에서도 가장 직관적이고 쉬운 방법으로 보여 이 풀이로 문제를 풀었는데, 제법 간단하고 쉽게 풀 수 있었다!
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/017.gif)
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 옹알이 (2) (Kotlin) (0) | 2024.06.26 |
---|---|
[프로그래머스] 기사단원의 무기 (Kotlin) (0) | 2024.06.24 |
[프로그래머스] 모의고사 (Kotlin) (0) | 2024.06.21 |
[프로그래머스] 행렬의 곱셈 (Kotlin) (0) | 2024.06.20 |
[프로그래머스] 과일 장수 (Kotlin) (0) | 2024.06.18 |