Skip to content

[Algorithm] 성격 유형 검사하기 #37

Description

@hwangJi-dev

💬 문제

[코딩테스트 연습 - 성격 유형 검사하기](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
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions