💬 문제
[코딩테스트 연습 - 성격 유형 검사하기](https://school.programmers.co.kr/learn/courses/30/lessons/118666)
💬 Idea
- 먼저 survey를 돌면서 점수를 얻게되는 성격 유형을 구한다 (type)
- 이후 성격 배열을 돌며 성격 점수판에 점수를 채운다.
- ex) RT 중 앞 성격유형에 점수를 주는 경우는 마이너스, 뒤 성격유형에 점수를 주는 경우는 플러스로 점수를 채운다.
- 성격 점수 배열을 돌며 최종적으로 마이너스가 찍힌 점수판인 경우 뒤 성격유형을 더하고, 플러스가 찍힌 점수판일 경우 앞 성격유형을 더해서 최종 성격 유형을 도출한다.
💬 풀이
func solution(_ survey:[String], _ choices:[Int])->String{letpersonality:[String]=["RT","CF","JM","AN"]varpersonalityScore:[Int]=[0,0,0,0]varresult:String=""for(index, i)in survey.enumerated(){lettype=String(choices[index]<4? i.first! : i.last!)for(idx, j)in personality.enumerated(){if j.contains(type){personalityScore[idx]+= type ==String(j.first!)?-abs(choices[index]-4):abs(choices[index]-4)}}}for(index, score)in personalityScore.enumerated(){
result += score <=0?String(personality[index].first!):String(personality[index].last!)}return result
}💬 더 나은 방법?
- 이중, 다중 for문을 사용하지 않는 더 효율적인 방법!
func solution(_ survey:[String], _ choices:[Int])->String{varpersonalityDict:[String:Int]=["R":0,"T":0,"C":0,"F":0,"J":0,"M":0,"A":0,"N":0]varresult:String=""for(index, i)in survey.enumerated(){personalityDict[choices[index]<4?String(i.first!):String(i.last!)]! +=abs(choices[index]-4)}
result +=personalityDict["R"]! >=personalityDict["T"]! ?"R":"T"
result +=personalityDict["C"]! >=personalityDict["F"]! ?"C":"F"
result +=personalityDict["J"]! >=personalityDict["M"]! ?"J":"M"
result +=personalityDict["A"]! >=personalityDict["N"]! ?"A":"N"return result
}
💬 문제[코딩테스트 연습 - 성격 유형 검사하기](https://school.programmers.co.kr/learn/courses/30/lessons/118666)
💬 Idea💬 풀이💬 더 나은 방법?