[프로그래머스] 성격 유형 검사하기

Huko·2022년 10월 26일
0

코테

목록 보기
1/4
post-thumbnail

프로그래머스

 

1. 문제설명

 

나만의 카카오 성격 유형 검사지를 만들려고 합니다.
성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.

 

2. 제안 사항

  • 1 ≤ survey의 길이 ( = n) ≤ 1,000
    • survey의 원소는 "RT", "TR", "FC", "CF", "MJ", "JM", "AN", "NA" 중 하나입니다.
    • survey[i]의 첫 번째 캐릭터는 i+1번 질문의 비동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.
    • survey[i]의 두 번째 캐릭터는 i+1번 질문의 동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.
  • choices의 길이 = survey의 길이
    • choices[i]는 검사자가 선택한 i+1번째 질문의 선택지를 의미합니다.
    • 1 ≤ choices의 원소 ≤ 7
choice
1 매우 비동의
2 비동의
3 약간 비동의
4 모르겠음
5 약간 동의
6 동의
7 매우 동의

선택지성격 유형 점수

매우 비동의 네오형 3점
비동의 네오형 2점
약간 비동의 네오형 1점
모르겠음 어떤 성격 유형도 점수를 얻지 않습니다
약간 동의 어피치형 1점
동의 어피치형 2점
매우 동의 어피치형 3점

 

3. 입출력 예

survey choices result
["AN", "CF", "MJ", "RT", "NA"] [5, 3, 2, 7, 5] "TCMA"
["TR", "RT", "TR"] [7, 1, 3] "RCJA"

 

4. 풀이 과정

이 문제는 해시 문제이다.

 

우선 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
}

profile
iOS 개발자 지망생

0개의 댓글