본문 바로가기
알고리즘/프로그래머스

프로그래머스 Lv1 성격 유형 검사하기 (python)

by 개발하는 호랑이 2024. 2. 11.

성격 유형 검사하기

 

 

 

 

풀이

문제가 길어서 잠깐 어,, 했지만 그래도 풀 수 있게다는 생각은 확실히 들었다.
그래서 아래처럼 풀었다.
1. 타입을 설정하는 리스트 생성
2. 해당 타입에 대한 점수를 기록한 리스트 생성
3. for 문을 통해 choices에서 점수를 기록
4. 심리 검사 완료 후 데이터 비교 분석하는 for문 생성
5. 4의 완료 후 값을 제출

# 나만의 카카오 유형 검사지 MBTI의 변종
# 타입 설정
# 동의 점수에 따른 유형 if문 작성
# 동점일 때는 사전적으로 더 앞선 것을 선택
# result에 넣을 수 있게, 바로바로 점수 계산 필요
types = ['R','T','C','F','J','M','A','N']

def solution(survey, choices):
    answer = ''
    types_score = [0,0,0,0,0,0,0,0]
    
    for i in range(len(choices)):
        # 4보다 작으면, survey[i][0]에 해당하는 값이 증가
        if choices[i] < 4:
            tmp_index = types.index(survey[i][0])
            types_score[tmp_index] += (choices[i] - 4) * (-1)

        # 4보다 크면, survery[i][1]에 해당하는 값이 증가
        elif choices[i] > 4:
            tmp_index = types.index(survey[i][1])
            types_score[tmp_index] += (choices[i] - 4)

        # 4와 같다면 넘어감
        else:
            pass
    # 심리 검사 완료 후 데이터 검사
    for i in range(0, len(types_score),2):
        # 검사결과 2개를 비교해서 앞의 값이 크거나 같으면 앞을 반대면 뒤를 출력
        if types_score[i] >= types_score[i+1]:
            answer += types[i]
        else:
            answer += types[i+1]
    return answer

다른 사람 풀이

신토불이 코드를 발견했다. 한국인으로 확실히 보기는 좋다.

def solution(설문_조사_배열, 선택지_배열):
    지표 = {}
    지표['RT'] = 지표['TR'] = {'R': 0, 'T': 0,}
    지표['FC'] = 지표['CF'] = {'C': 0, 'F': 0,}
    지표['MJ'] = 지표['JM'] = {'J': 0, 'M': 0,}
    지표['AN'] = 지표['NA'] = {'A': 0, 'N': 0,}
    점수 = {
        '매우 비동의': 3,
        '비동의': 2,
        '약간 비동의': 1,
        '모르겠음': 0,
        '약간 동의': 1,
        '동의': 2,
        '매우 동의': 3,
    }
    비동의 = [1, 2, 3]
    동의 = [5, 6, 7]
    선택지 = {
        1: '매우 비동의',
        2: '비동의',
        3: '약간 비동의',
        4: '모르겠음',
        5: '약간 동의',
        6: '동의',
        7: '매우 동의',
    }
    answer = ''

    for 인덱스 in range(len(설문_조사_배열)):
        비동의_캐릭터, 동의_캐릭터 = 설문_조사_배열[인덱스]

        if 선택지_배열[인덱스] in 비동의:
            지표[설문_조사_배열[인덱스]][비동의_캐릭터] += 점수[선택지[선택지_배열[인덱스]]]
            continue

        if 선택지_배열[인덱스] in 동의:
            지표[설문_조사_배열[인덱스]][동의_캐릭터] += 점수[선택지[선택지_배열[인덱스]]]

    결과_배열 = [지표['RT'].items(), 지표['FC'].items(), 지표['MJ'].items(), 지표['AN'].items()]
    정렬된_배열 = []

    for 결과 in 결과_배열:
        정렬된_배열.append(sorted(결과, key=lambda x: -x[1]))

    return ''.join([캐릭터_점수_튜플[0] for [캐릭터_점수_튜플, _] in 정렬된_배열])