티스토리 뷰

https://school.programmers.co.kr/learn/courses/30/lessons/118666

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


1. 접근 방식

  • types와 scores 2개의 리스트를 활용하자.

1번 지표 RT, 2번 지표 CF, 3번 지표 JM, 4번 지표 AN이므로, 지표 순서를 고려하면서 각 지표의 유형은 사전 순으로 types 리스트에 담는다. 즉, types == ['R', 'T', 'C', 'F', 'J', 'M', 'A', 'N']이다. scores는 types의 인덱스와 일치하는 성격 유형의 점수이다. 초기엔 모두 0점이다.

 

  • survey가 'RT'일 때, 선택지가 4보다 작다면 R, 크다면 T

즉, 선택지가 1(매우 비동의)라면 RT 중 0번째 인덱스인 R이, 7(매우 동의)라면 1번째 인덱스인 T의 점수가 추가된다.

 

  • 두 가지의 성격 유형을 중 어떤 유형인지 판단하기 위해 0부터 8까지 step = 2로 for문을 돌린다.

step = 2로 설정하는 이유는 위 그림처럼 RT, CF, JM, AN로 하나의 지표에 유형이 2개씩 나뉘기 때문이다.

scores[i]이 scores[i+1]보다 크거나 같다면, types[i] 유형이다. 이때 포인트는 "같다면"이라는 조건이다. 이 조건 덕분에 'A', 'N'처럼 점수가 동일하더라도, 사전 순인 A 유형이 선택된다.

 

 

2. 정답 코드

def solution(survey, choices):
    table = [0, 3, 2, 1, 0, 1, 2, 3] # 0번째 원소는 자릿수 맞추기용
    
    # compute scores
    types = ['R', 'T', 'C', 'F', 'J', 'M', 'A', 'N']
    scores = [0] * 8
    for i in range(len(choices)):
        if choices[i] == 4: continue
        
        t = 0 if choices[i] < 4 else 1
        index = types.index(survey[i][t])
        scores[index] += table[choices[i]]
    
    # make type
    answer = ''
    for i in range(0, 8, 2):
        answer += types[i] if scores[i] >= scores[i+1] else types[i+1]
    return answer
728x90