본문 바로가기

Python/코딩테스트

[프로그래머스/python] 코딩테스트 연습 Lv.1 (6월 네 번째 주 1)

728x90

성격 유형 검사하기

문제 설명

 

입출력 예

 

문제 상황 발생

def solution(survey, choices):
    answer = ''
    arr = [0 for _ in range(8)]
    for i in range(len(survey)):
        if survey[i][0]=="R":
            if choices[i]<4:
                arr[0]+=(choices[i]*(-1)+4)
            elif choices[i]>4:
                arr[1]+=(choices[i]-4)
        elif survey[i][0]=="T":
            if choices[i]<4:
                arr[1]+=(choices[i]*(-1)+4)
            elif choices[i]>4:
                arr[0]+=(choices[i]-4)
        elif survey[i][0]=="C":
            if choices[i]<4:
                arr[2]+=(choices[i]*(-1)+4)
            elif choices[i]>4:
                arr[3]+=(choices[i]-4)
        elif survey[i][0]=="F":
            if choices[i]<4:
                arr[3]+=(choices[i]*(-1)+4)
            elif choices[i]>4:
                arr[2]+=(choices(i)-4)        
        elif survey[i][0]=="J":
            if choices[i]<4:
                arr[4]+=(choices[i]*(-1)+4)
            elif choices[i]>4:
                arr[5]+=(choices[i]-4)
        elif survey[i][0]=="M":
            if choices[i]<4:
                arr[5]+=(choices[i]*(-1)+4)
            elif choices[i]>4:
                arr[4]+=(choices[i]-4)
        elif survey[i][0]=="A":
            if choices[i]<4:
                arr[6]+=(choices[i]*(-1)+4)
            elif choices[i]>4:
                arr[7]+=(choices[i]-4)
        elif survey[i][0]=="N":
            if choices[i]<4:
                arr[7]+=(choices[i]*(-1)+4)
            elif choices[i]>4:
                arr[6]+=(choices[i]-4)
    if arr[0]>=arr[1]:
        answer+="R"
    else:
        answer+="T"
    if arr[2]>=arr[3]:
        answer+="C"
    else:
        answer+="F"
    if arr[4]>=arr[5]:
        answer+="J"
    else:
        answer+="M"
    if arr[6]>=arr[7]:
        answer+="A"
    else:
        answer+="N"
    return answer

-> 런타임 에러 발생 (코드 보면 그럴만도 함)

 

Solution

def solution(survey, choices):
    answer = ''
    dic= {"R" : 0, "T" : 0, "C" : 0, "F" : 0, "J" : 0, "M" : 0, "A" : 0, "N" : 0 }
    
    for s, c in zip(survey, choices): # s:R, T, C, ... / c:1, 2, 3, 4, ...
        if c>4: #동의 항목
            dic[s[1]] += c-4 # RT 중 T에 1(5-4), 2(6-4), 3(7-4) 점수 추가
        elif c<4: #비동의 항목
            dic[s[0]] += 4-c # RT 중 R에 1(4-3), 2(4-2), 3(4-1) 점수 추가
    
    arr = list(dic.items()) # ["R", 0, "T", 0, "C", 0, ...]
    
    for i in range(0, 8, 2): # RT, CF, JM, AN 점수 비교
        if arr[i][1] < arr[i+1][1]:
            answer += arr[i+1][0]
        else:
            answer += arr[i][0]
    return answer

 

*zip() 내장함수

>>> numbers = [1, 2, 3]
>>> letters = ["A", "B", "C"]
>>> for pair in zip(numbers, letters):
...     print(pair)
...
(1, 'A')
(2, 'B')
(3, 'C')

dictionary를 이용하여 깔끔하게 문제를 풀 수 있었음...

 

Result

728x90