본문 바로가기
Coding Test/Go

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

by giem 2022. 8. 19.
반응형

이전 포스트의 파이썬, C++ 코드에 이어

프로그래머스 성격 유형 검사하기를 Go로 풀어보겠다.

2022년 카카오 인턴 코딩 테스트 출제로 아직 프로그래머스에선 푼 사람이 없다.


문제

레벨 1치고 문제가 좀 길다. 하지만 간단하다.

 

survey에 성격 유형 지표들이 들어있고

choices에 따라 survey의 유형에 값을 더해주고

4개의 분류에서 각각 값이 높은 지표를 리턴하면 된다.


구현

survey와 choices의 개수가 같기 때문에

이 사이즈만큼 반복을 하고

map에 survey의 지표 중에 choices에 따라 선택하여 값을 더해준다.

그 후 map의 값을 비교하여 성격 유형 값에 추가해주고

성격유형을 리턴한다.

 

문제만 길지 간단한 문제라고 생각한다.


코드
func solution(survey []string, choices []int) string {
    var score = [...]int{0,3,2,1,0,1,2,3}
    survelm := map[string]int{
        "R":0, "T":0,
        "C":0, "F":0,
        "J":0, "M":0,
        "A":0, "N":0,
    }
    answer := ""
    
    for i, v := range survey {
        survelm[string(v[choices[i]/4])] += score[choices[i]]
    }
    
    if survelm["R"] >= survelm["T"] {
        answer += "R"
    } else {
        answer += "T"
    }
    if survelm["C"] >= survelm["F"] {
        answer += "C"
    } else {
        answer += "F"
    }
    if survelm["J"] >= survelm["M"] {
        answer += "J"
    } else {
        answer += "M"
    }
    if survelm["A"] >= survelm["N"] {
        answer += "A"
    } else {
        answer += "N"
    }

    return answer
}

 

약간의 트릭은 choices[i] /4 부분인데

index 4까지는 앞의 값, 그 이후는 뒤의 값을 보도록 한 것이다.

c/c++에서는 int / int 값이 int 이므로 따로 처리할 것이 없다.

 

Go에는 삼항연산자가 없기 때문에

코드의 라인수를 줄이기 위해서는 for문을 반복하도록 해야 할 듯하다.

 

나머지는 쉽게 이해할 수 있다.


다른 풀이

아직 신상문제라 그런지 다른 풀이가 아예 없다....

 

 

혹시 좋은 방법이 있다면 댓글로 알려주시면 감사하겠습니다.

반응형

댓글