이 문제처럼 특정 값을 가지고 점수를 구한다던지 결과값을 구하는 상황에 있어서는 배열을 만들어 배열의 인덱스로 해당 값을 활용하는 것이 효과적입니다.

 

다음처럼 특정 값 예를들어 R 의 값을 증가시키고 싶다면 다음과 같이 접근할 수 있겠습니다.

  • Character 타입의 배열을 만들어 각각의 성격 유형들을 담습니다
  • 각각의 성격 유형들의 점수를 firstIndex 를 활용하여 인덱스를 추출하여 해당 Int 배열의 값을 증가시킵니다.
let info: [Character] = ["R", "T", "C", "F", "J", "M", "A", "N"]
var list: [Int] = .init(repeating: 0, count: 8)
list[info.firstIndex(of: value.first!)!] += 3

 

 

import Foundation

func solution(_ survey:[String], _ choices:[Int]) -> String {
    var info: [Character] = ["R", "T", "C", "F", "J", "M", "A", "N"]
    var list: [Int] = .init(repeating: 0, count: 8)
    for (index,value) in survey.enumerated() {
        let point = choices[index]
        switch point {
        case 1:
            list[info.firstIndex(of: value.first!)!] += 3
            break
        case 2:
            list[info.firstIndex(of: value.first!)!] += 2
            break
        case 3:
            list[info.firstIndex(of: value.first!)!] += 1
            break
        case 4:
            break
        case 5:
            list[info.firstIndex(of: value.last!)!] += 1
            break
        case 6:
            list[info.firstIndex(of: value.last!)!] += 2
            break
        case 7:
            list[info.firstIndex(of: value.last!)!] += 3
            break
        default:
            break
        }
    }
    
    var result = ""
    for i in stride(from: 0, to: list.count-1, by: 2) {
        if list[i] < list[i+1] {
            result += String(info[i+1])
        } else if list[i] > list[i+1] {
            result += String(info[i])
        } else {
            let a = min(info[i], info[i+1])
            result += String(a)
        }
    }
    
    return result
}
ytw_developer