나만의 카카오 성격 유형 검사지를 만들려고 합니다.
성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.
choice | 뜻 |
1 | 매우 비동의 |
2 | 비동의 |
3 | 약간 비동의 |
4 | 모르겠음 |
5 | 약간 동의 |
6 | 동의 |
7 | 매우 동의 |
선택지성격 유형 점수
매우 비동의 | 네오형 3점 |
비동의 | 네오형 2점 |
약간 비동의 | 네오형 1점 |
모르겠음 | 어떤 성격 유형도 점수를 얻지 않습니다 |
약간 동의 | 어피치형 1점 |
동의 | 어피치형 2점 |
매우 동의 | 어피치형 3점 |
survey | choices | result |
["AN", "CF", "MJ", "RT", "NA"] | [5, 3, 2, 7, 5] | "TCMA" |
["TR", "RT", "TR"] | [7, 1, 3] | "RCJA" |
이 문제는 해시 문제이다.
우선 dictionary형태로 각 성격유형별로 정의를 해준 후
위에 choice표를 보면 알 수 있듯이 모르겠을 경우에는 점수가 더해지는것이 없고 choice의 값에 4를 빼준 후 절대값을 구해서 더해주면 성격 유형 점수를 계산 할 수 있다.
import Foundation
func solution(_ survey:[String], _ choices:[Int]) -> String {
var result : [String : Int] = ["R":0, "T":0, "C":0, "F":0, "J":0, "M":0, "A":0, "N":0]
for i in 0..<survey.count{
var point = choices[i] - 4
if point < 0{
result[String(survey[i].prefix(1))]! += abs(point)
}
else if point > 0{
result[String(survey[i].suffix(1))]! += point
}
}
var answer = ""
result["R"]! < result["T"]! ? (answer += "T") : (answer += "R")
result["C"]! < result["F"]! ? (answer += "F") : (answer += "C")
result["J"]! < result["M"]! ? (answer += "M") : (answer += "J")
result["A"]! < result["N"]! ? (answer += "N") : (answer += "A")
return answer
}