sm 기술 블로그

성격 유형 검사하기(2022 KAKAO TECH INTERNSHIP) - 파이썬 본문

문제/프로그래머스_파이썬

성격 유형 검사하기(2022 KAKAO TECH INTERNSHIP) - 파이썬

sm_hope 2022. 10. 7. 10:09
num = [0,3,2,1,0,1,2,3]
name = [["R","T"], ["C","F"], ["J","M"], ["A","N"]]
score = [[0,0],[0,0],[0,0],[0,0]]

def sumScoreA(x, choice):
    if(choice < 4) :
        score[x][0] += num[choice]
    else :
        score[x][1] += num[choice]

def sumScoreB(x, choice):
    if(choice < 4) :
        score[x][1] += num[choice]
    else :
        score[x][0] += num[choice]

def indicator(x, s, choice):
    if(s == "RT" or s == "CF" or s == "JM" or s == "AN"):
        sumScoreA(x,choice)
    else :
        sumScoreB(x,choice)

def calResult():
    result = []
    for i in range(4):
        if(score[i][0] > score[i][1] or score[i][0] == score[i][1]):
            result.append(name[i][0])
        else:
            result.append(name[i][1])
    return "".join(result)

def solution(survey, choices):
    answer = ''
    for i in range(len(survey)):
        if(survey[i] == "RT" or survey[i] == "TR"):
            indicator(0, survey[i], choices[i])
        elif(survey[i] == "CF" or survey[i] == "FC"):
            indicator(1, survey[i], choices[i])
        elif(survey[i] == "JM" or survey[i] == "MJ"):
            indicator(2, survey[i], choices[i])
        elif(survey[i] == "AN" or survey[i] == "NA"):
            indicator(3, survey[i], choices[i])
    answer = calResult()
    return answer

문제요약

누른 선택지에 따라 성격 유형이 나오게 해라.

설명

그냥 하란대로 하고, 함수를 이용해서 코드를 줄인것 뿐이다.

1. 메인 함수

def solution(survey, choices):
    answer = ''
    for i in range(len(survey)):
        if(survey[i] == "RT" or survey[i] == "TR"):
            indicator(0, survey[i], choices[i])
        elif(survey[i] == "CF" or survey[i] == "FC"):
            indicator(1, survey[i], choices[i])
        elif(survey[i] == "JM" or survey[i] == "MJ"):
            indicator(2, survey[i], choices[i])
        elif(survey[i] == "AN" or survey[i] == "NA"):
            indicator(3, survey[i], choices[i])
    answer = calResult()
    return answer

조사 지표에 따라서 함수를 실행한다.

2. 분기 함수

def indicator(x, s, choice):
    if(s == "RT" or s == "CF" or s == "JM" or s == "AN"):
        sumScoreA(x,choice)
    else :
        sumScoreB(x,choice)

지표가 첫번째면 sumScoreA를 실행하고, 두번째면 sumScoreB를 실행한다.

3. 점수 함수

def sumScoreA(x, choice):
    if(choice < 4) :
        score[x][0] += num[choice]
    else :
        score[x][1] += num[choice]

def sumScoreB(x, choice):
    if(choice < 4) :
        score[x][1] += num[choice]
    else :
        score[x][0] += num[choice]

RT, CF, JM, AN은 A를 실행하고 아니면 B를 실행한다.

4. 결과 함수

def calResult():
    result = []
    for i in range(4):
        if(score[i][0] > score[i][1] or score[i][0] == score[i][1]):
            result.append(name[i][0])
        else:
            result.append(name[i][1])
    return "".join(result)

앞 혹은 뒤 중 큰 쪽을 result에 추가하여 join을 통해 문자열을 만들어 return 해준다.

Comments