문제


틀렸던 풀이
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 |
