프로그래머스 | 2022 KAKAO TECH INTERNSHIP | 성격 유형 검사 [파이썬 python]

2023. 4. 27. 17:00·Algorithm/프로그래머스
 

프로그래머스

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

programmers.co.kr

문제가 길기 때문에 접근법과 풀이과정에 대한 설명만 남깁니다.

 

코드

def solution(survey, choices):
    n1, n2, n3, n4 = {'R':0, 'T':0}, {'C':0, 'F':0}, {'J':0, 'M':0}, {'A':0, 'N':0}
    
    for i in range(len(survey)):
        if survey[i] == 'RT' or survey[i] =='TR':
            if choices[i] < 4:  # 비동의 관련 선택지
                n1[survey[i][0]] += 4 - choices[i]
            elif choices[i] > 4:  # 동의 관련 선택지
                n1[survey[i][1]] += choices[i] - 4
                
        if survey[i] == 'CF' or survey[i] =='FC':
            if choices[i] < 4:  # 비동의 관련 선택지
                n2[survey[i][0]] += 4 - choices[i]
            elif choices[i] > 4:  # 동의 관련 선택지
                n2[survey[i][1]] += choices[i] - 4   
                
        if survey[i] == 'JM' or survey[i] =='MJ':
            if choices[i] < 4:  # 비동의 관련 선택지
                n3[survey[i][0]] += 4 - choices[i]
            elif choices[i] > 4:  # 동의 관련 선택지
                n3[survey[i][1]] += choices[i] - 4
                
        if survey[i] == 'AN' or survey[i] =='NA':
            if choices[i] < 4:  # 비동의 관련 선택지
                n4[survey[i][0]] += 4 - choices[i]
            elif choices[i] > 4:  # 동의 관련 선택지
                n4[survey[i][1]] += choices[i] - 4
    
    answer = ''
    answer += 'R' if n1['R'] >= n1['T'] else 'T'
    answer += 'C' if n2['C'] >= n2['F'] else 'F'
    answer += 'J' if n3['J'] >= n3['M'] else 'M'
    answer += 'A' if n4['A'] >= n4['N'] else 'N'
    return answer

4가지 유형에 대한 점수를 저장할 딕셔너리를 각각 만들어 주었다.

n1에는 RT, n2에는 CF, n3에는 JM, n4에는 AN에 대한 점수를 저장한다.

 

survey[i]의 문제 유형에 따라 if문 4가지를 만든 다음, 해당 문제에 대한 선택지의 값을 확인한다. 

4보다 선택지 값이 작으면 비동의에 관련된 문제이고, 4보다 선택지 값이 크면 동의에 관련된 문제이다.

문제에서 survey[i]의 첫 번째 요소(=0번 인덱스)는 비동의 관련 선택지를 골랐을 경우의 성격 유형, 두 번째 요소(=1번 인덱스)는 동의 관련 선택지를 골랐을 경우의 성격 유형이라고 알려주었기 때문에 인덱스를 통해 접근한다.

선택지 값에 따라 비동의 문제 또는 동의 문제에 해당 값을 누적시켜 준다. 

survey는 최대 1,000개가 가능하기 때문에 =이 아닌 +=를 통해 누적시켜줘야 한다.

 

이렇게 4가지 유형에 대해 모든 점수 계산이 완료되면 어떤 성격 유형을 가지고 있는지 반환해야 한다.

answer라는 문자열에 둘 중 큰 누적 값을 가지는 Key를 추가한다.

만약, R, T의 값이 같으면 사전순으로 반환해야 하므로 R 쪽에 등호를 붙여준다.

 

새로운 변수를 만들지 않고 반환하는 또 다른 방법이 있다.

return max(n1, key=n1.get)+max(n2, key=n2.get)+max(n3, key=n3.get)+max(n4, key=n4.get)

딕셔너리에서 최대 value를 가지는 key를 찾기 위해서는 max(dict, key=dict.get)를 사용할 수 있다.

이때, 최대 value를 가지는 key가 2개 이상이어도 딕셔너리에서 앞쪽에 위치하는 key를 리턴한다. 

max를 사용하기 위해 처음 딕셔너리를 만들 때 TR 순이 아닌 RT 순으로 만들어 준 것이다.

따라서, max를 사용해 n1, n2, n3, n4에서 value가 큰 key를 찾아 + 연산자를 이용해 연결시켜 주면 구하고자 하는 답을 만들 수 있다.

 

저작자표시 (새창열림)
'Algorithm/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 | 공원 산책 [파이썬 python]
  • 프로그래머스 | 2021 KAKAO BLIND RECRUITMENT | 신규 아이디 추천 [파이썬 python]
  • 프로그래머스 | 달리기 경주 [파이썬 python]
  • 프로그래머스 | 완주하지 못한 선수 [파이썬 python]
dduniverse
dduniverse
  • dduniverse
    dduniverse
    dduniverse
  • 전체
    오늘
    어제
    • 분류 전체보기 (244)
      • Algorithm (123)
        • 알고리즘 이론 (8)
        • 백준 (19)
        • 프로그래머스 (83)
        • 구름 알고리즘 먼데이 챌린지 (13)
      • 빅데이터분석기사 (10)
        • 통계 (4)
        • 실기 (6)
      • KT에이블스쿨 (26)
      • FrontEnd (11)
        • React (5)
        • 기타 (6)
      • BackEnd (18)
        • Django (15)
        • Spring (3)
      • DS & ML (11)
        • Machine Learning (9)
        • Kaggle (2)
      • TIL (45)
        • python (22)
        • javascript (3)
        • 오류해결 (10)
        • 기타 (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 관리
    • 글쓰기
  • 링크

  • 인기 글

  • hELLO· Designed By정상우.v4.10.0
dduniverse
프로그래머스 | 2022 KAKAO TECH INTERNSHIP | 성격 유형 검사 [파이썬 python]
상단으로

티스토리툴바