카테고리 없음

[2022 KAKAO TECH INTERNSHIP] 성격 유형 검사하기

코딩초보ran 2023. 12. 21. 14:27

10:29 시작 11:26 끝

 

문제 확인

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

 

프로그래머스

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

programmers.co.kr

문제 설명과 입출력 예시 및 설명은 직접 읽고 이해해야할 것 같다.

근데 위 링크 들어가면 solution 코드도 같이 보이는 건가..?

혹시.. 들어가보신 분이 계시다면.. 댓글 남겨주시면 감사하겠습니다. :)

(저는 문제 처음푸는 화면으로 연결하고 싶어요!)


아이디어

글로 설명하는 건 참 어려운 것 같다.

결국 영상으로 올린다..

 

다음엔 처음부터 녹화를 해야겠다....ㅇㅅㅇ..

 

문제 풀이

def solution(survey, choices):
    answer = ''
    personality_ = ['R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'] # 성격유형을 순서대로 넣은 list생성
    mid = 4        # 선택 결과가 동의쪽인지 비동의쪽인지 확인하기 위해 
                   # choice 결과가 4보다 크면 동의 관련 선택지를 선택한 거고, 
                   # 4보다 작으면 비동의 관련 선택지를 선택한 것임
    dict1= {}      # 예시 : {'R':0, 'T':0, ...} 이렇게 만들기 위해서.
    for p in personality_ : # dict1을 위 예시처럼 만들어줌.
        dict1[p] = 0        # key: 성격유형, value:유형 별 점수

        
    for s, c in zip(survey, choices): # survey: 질문별 성격판단지표, choices: 질문별 선택 결과
        res = c - mid                 # 질문별 선택결과 - 4(딱 중간)
        if res > 0:					  # res가 양수이면, idx=1
            idx = 1		
        elif res < 0:				  # res가 음수이면, idx=0
            idx = 0
        else:						  # res가 0이면, dict에 있는 유형 별 점수에 더해줄 것이 없음
            continue				  # 따라서 아래 코드는 건너 띄고 다음 반복 진행
        
        key = s[idx] 				  # 위에서 정해진 idx로 key를 만들어주고
        dict1[key] += abs(res)		  # dict1에서 키에 해당하는 value에 res의 절댓값(res가 음수인 경우도 있기 때문에)을 더해준다.

	# 유형 별 점수를 비교해서 큰 점수를 가진 유형을 반환해줄 것임.
    for i in range(0,len(personality_),2):          # 유형 2개씩만 비교해야함. R-T, J-M 이렇게.
    												# 그래서 index를 1개씩 건너띄는 코드로 작성
        k1, k2 = personality_[i], personality_[i+1]
        v1, v2 = dict1[k1], dict1[k2]
        
        if v1 >= v2:      # 성격 유형 점수가 같으면 유형 중 사전 순으로 빠른 성격유형을 반환해야하는데 
                          # 이미 personality_에 알파벳 사전 순으로 정리를 해두었음. 
                          # 그래서 그냥 두 유형 중에 앞에 있는 유형으르 반환해주면 됨. 
                          # 따라서 >= 이렇게 넣어줌.
            answer+=k1
        elif v2 > v1:
            answer+=k2
        
    return answer

코드 (주석 없는 ver)

def solution(survey, choices):
    answer = ''
    personality_ = ['R', 'T', 'C', 'F', 'J', 'M', 'A', 'N']
    
    mid = 4        
    dict1= {}      
    for p in personality_ : 
        dict1[p] = 0
        
    for s, c in zip(survey, choices): 
        res = c - mid                 
        if res > 0:					 
            idx = 1		
        elif res < 0:				 
            idx = 0
        else:						  
            continue				  
        
        key = s[idx] 				 
        dict1[key] += abs(res)		  

    for i in range(0,len(personality_),2):
        k1, k2 = personality_[i], personality_[i+1]
        v1, v2 = dict1[k1], dict1[k2]
        
        if v1 >= v2:  
            answer+=k1
        elif v2 > v1:
            answer+=k2
        
    return answer

채점 결과

맞았다 오예~

문제 출처 : 프로그래머스/ 성격 유형 검사하기/ Lv1