[프로그래머스] 성격 유형 검사하기

2026. 3. 16. 18:14·Algorithm

문제

 

 

틀렸던 풀이

def solution(survey, choices):
	#성격 유형 검사 알파벳 딕셔너리 생성
    mbti = {'R' : 0, 'T' : 0, 'C' : 0, 'F' : 0, 'J' : 0, 'M' : 0, 'A' : 0, 'N' : 0}
    res = ''
    
    #딕셔너리에 해당 문자에 맞는 점수 부여
    for i in range(len(survey)) :
        if choices[i] > 4 :		#뒤의 문자에 점수 부여
            mbti[survey[i][1]] += choices[i] - 4
        elif choices[i] < 4 :	#앞의 문자에 점수 부여
            mbti[survey[i][0]] += (choices[i] - 4)
        else :
            continue
    
    #점수 비교 후, res 반환
    if mbti['R'] >= mbti['T'] :
        res += 'R'
    else :
        res += 'T'
        
    if mbti['C'] >= mbti['F'] :
        res += 'C'
    else :
        res += 'F'
        
    if mbti['J'] >= mbti['M'] :
        res += 'J'
    else :
        res += 'M'
        
    if mbti['A'] >= mbti['N'] :
        res += 'A'
    else :
        res += 'N'
        
    return res

 

정답 코드

choices[i] > 4 일시에 계산 로직이 잘못되어있었다.

예를 들어 choices[i] = 3일 시에, survey[i]의 앞의 문자에 1점을 줘야 하는데, 위의 코드대로라면 음수의 점수를 부여하기 때문에, 결과값이 옳지 않게 나온다. 따라서 해당 연산 로직을 수정했다.

 

def solution(survey, choices):
    mbti = {'R' : 0, 'T' : 0, 'C' : 0, 'F' : 0, 'J' : 0, 'M' : 0, 'A' : 0, 'N' : 0}
    res = ''
    
    for i in range(len(survey)) :
        if choices[i] > 4 :
            mbti[survey[i][1]] += (choices[i] - 4)
        elif choices[i] < 4 :
        	# +=가 아닌 -=로 바꾸어 연산, 올바르게 점수 부여
            mbti[survey[i][0]] -= (choices[i] - 4)
        else :
            continue
    
    if mbti['R'] >= mbti['T'] :
        res += 'R'
    else :
        res += 'T'
        
    if mbti['C'] >= mbti['F'] :
        res += 'C'
    else :
        res += 'F'
        
    if mbti['J'] >= mbti['M'] :
        res += 'J'
    else :
        res += 'M'
        
    if mbti['A'] >= mbti['N'] :
        res += 'A'
    else :
        res += 'N'
        
    return res

 

 

1. 성격 유형 알파벳에 점수를 부여할 딕셔너리 생성

2. 총 survey에 있는 질문의 수 만큼 반복

3. 4점을 넘을 시에, 해당 문자열(ex. RT)의 뒤 문자에 해당하는 키에 -4한 값 plus

4. 4점에 미달할 시에, 해당 문자열의 앞 문자에 해당하는 키에 -4한 값 minus

5. 반복 종료 후, R/T, C/F, J/M, A/N 비교하여 더 점수가 큰 값 문자열에 추가, 문자열 반환

 

연산 로직을 생각하기 위해 점수를 4가 중심인 수직선에 놓고 생각을 했다. choices[i]가 양수일 경우 survey[i]의 뒷 문자, 음수일 경우 survery[i]의 앞 문자에 중심에서 떨어진 값 만큼의 점수를 부여한다고 생각하면 좋을 듯 하다.

 

 

 

GitHub Link    ←

'Algorithm' 카테고리의 다른 글

[프로그래머스] [PCCE 기출문제] 10번 / 데이터 분석  (0) 2026.03.20
[프로그래머스] 로또의 최고 순위와 최저 순위  (1) 2026.03.16
[프로그래머스] 햄버거 만들기  (1) 2026.03.16
[프로그래머스] 둘만의 암호  (1) 2026.03.16
[프로그래머스] 옹알이(1)  (1) 2026.03.10
'Algorithm' 카테고리의 다른 글
  • [프로그래머스] [PCCE 기출문제] 10번 / 데이터 분석
  • [프로그래머스] 로또의 최고 순위와 최저 순위
  • [프로그래머스] 햄버거 만들기
  • [프로그래머스] 둘만의 암호
uj07096
uj07096
개발블로그 시작 !
  • uj07096
    김재헌 님의 블로그
    uj07096
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • Algorithm
      • My IT
        • Article
        • Codes
      • TIL
      • My Projects N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DenseNet
    AI
    PyTorch
    딥러닝
    파이썬
    transfer learning
    Tensor
    autoencoder
    EDA
    optuna
    데이터전처리
    Faster R-CNN
    GAN
    코딩테스트
    YOLO
    til
    머신러닝
    EfficientNet
    ResNet
    이상치
    python
    Algorithm
    LeetCode
    DeepLearning
    코테
    convolution
    kaggle
    Stack
    LSTM
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
uj07096
[프로그래머스] 성격 유형 검사하기
상단으로

티스토리툴바