Skip to content

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

Closed
@hwangJi-dev

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 {
    let personality: [String] = ["RT", "CF", "JM", "AN"]
    var personalityScore: [Int] = [0, 0, 0, 0]
    var result: String = ""
    
    for (index, i) in survey.enumerated() {
        let type = 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 {
    var personalityDict: [String: Int] = ["R": 0, "T": 0, "C": 0, "F": 0, "J": 0, "M": 0, "A": 0, "N": 0]
    var result: 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
}

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions