본문 바로가기

프로그래머스 (Swift)/lv 1

[lv1] 성격 유형 검사하기

문제

 

내 정답 코드

import Foundation

// 하나의 유형에 대한 객체로 유형 value와 score를 가지고 있다.
struct Category {
    let category: String
    var score: Int = 0
    
    mutating func plusScore(num: Int) {
        self.score += num
    }
}

// 하나의 지표에 대한 객체로 2개의 유형과 choice에 대한 점수를 가지고 있다.
struct Chracteristic {
    let scores:[Int:Int] = [1:3, 2:2, 3:1, 5:1, 6:2, 7:3]
    var categories: [Category]
    
    // survey와 choice에 따라 유형의 score를 추가한다.
    mutating func cal(survey: String, choice: Int) {
		    // choice가 4보다 작으면 survey의 첫번째 문자와 일치하는 유형에 점수를 더한다.
        if choice < 4 {
            for i in 0..<categories.count {
                if categories[i].category == String(survey.first!) {
                    categories[i].plusScore(num: scores[choice]!)
                }
            }
        // choice가 4보다 크면 survey의 마지막 문자와 일치하는 유형에 점수를 더한다.
        } else if choice > 4 {
            for i in 0..<categories.count {
                if categories[i].category == String(survey.last!) {
                    categories[i].plusScore(num: scores[choice]!)
                }
            }
        }
    }
    
    // score가 더 높은 유형을 반환한다.
    func winCategory() -> Category {
        return categories[0].score >= categories[1].score ? categories[0] : categories[1]
    }
}

func solution(_ survey:[String], _ choices:[Int]) -> String {
    var result = "" // 최종 반환 문자열
    // 모든 유형의 지표를 담는다.
    var chracter: [Chracteristic] = [
        Chracteristic(categories: [Category(category: "R"), Category(category: "T")]),
        Chracteristic(categories: [Category(category: "C"), Category(category: "F")]),
        Chracteristic(categories: [Category(category: "J"), Category(category: "M")]),
        Chracteristic(categories: [Category(category: "A"), Category(category: "N")])
    ]
    
    // survey가 가르키는 지표에 따라 cal함수를 호출하여 score를 계산한다.
    for i in 0..<survey.count {
        if survey[i].contains("R") {
            chracter[0].cal(survey: survey[i], choice: choices[i])
        } else if survey[i].contains("C") {
            chracter[1].cal(survey: survey[i], choice: choices[i])
        } else if survey[i].contains("J") {
            chracter[2].cal(survey: survey[i], choice: choices[i])
        } else {
            chracter[3].cal(survey: survey[i], choice: choices[i])
        }
    }
    
    // winCategory() 함수를 이용하여 result를 계산한다.
    chracter.map {
        result.append($0.winCategory().category)
    }
    
    return result
}

 

#

1. 코드가 길어 주석으로 설명 대체함


배운 기술

'프로그래머스 (Swift) > lv 1' 카테고리의 다른 글

[lv1] 행렬의 덧셈  (0) 2024.09.10
[lv1] 짝수와 홀수  (0) 2024.09.05
[lv1] 로또의 최고 순위와 최저 순위  (0) 2024.09.02
[lv1] 평균 구하기  (0) 2024.09.02
[lv1] 숫자 짝꿍  (0) 2024.08.30