기타/Coding test

[Python] 프로그래머스 level 1. 성격유형 검사

SOIT 2022. 8. 19. 16:04

https://school.programmers.co.kr/learn/courses/30/lessons/118666?language=python 

 

 

zip()

파이썬의 zip() 내장 함수로 데이터 엮기

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

위와 같이 zip() 함수를 사용하면 마치 옷의 지퍼를 올리는 것 처럼 양 측에 있는 데이터를 하나씩 차례로 짝을 지어줍니다.

 

병렬 처리도 가능

>>> for number, upper, lower in zip("12345", "ABCDE", "abcde"):
...     print(number, upper, lower)
...
1 A a
2 B b
3 C c
4 D d
5 E e

 

zip, 사전 변환

zip() 함수를 이용하면 두 개의 리스트나 터플 부터 쉽게 사전(dictionary)을 만들 수 있습니다. 키를 담고 있는 리스트와 값을 담고 있는 리스트를 zip() 함수에 넘긴 후, 그 결과를 다시 dict() 함수에 넘기면 됩니다.

 

>>> keys = [1, 2, 3]
>>> values = ["A", "B", "C"]
>>> dict(zip(keys, values))
{1: 'A', 2: 'B', 3: 'C'}

 

문제에서 봐야할 부분 

 

다른 해설 참고

def solution(survey, choices):
    answer = ''
    a={'R':0, 'T':0, 'C':0, 'F':0, 'J':0, 'M':0, 'A':0, 'N':0}
    for i,j in zip(survey, choices):
        if j<4:
            a[i[0]]+=4-j
        else:
            a[i[1]]+=j-4
    t=[i for i in a.keys()]
    for i in range(0,8,2):
        if a[t[i]]>=a[t[i+1]]:
            answer+=t[i]
        else:
            answer+=t[i+1]
    return answer
survey= ["AN", "CF", "MJ", "RT", "NA"]
choices= [5, 3, 2, 7, 5]

my_dict = {"RT":0,"CF":0,"JM":0,"AN":0}
for A,B in zip(survey,choices):
    if A not in my_dict.keys():
        A = A[::-1]
        my_dict[A] -= B-4
    else:
        my_dict[A] += B-4
        
result = ""
for name in my_dict.keys():
    if my_dict[name] > 0:
        result += name[1]
    elif my_dict[name] < 0:
        result += name[0]
    else:
        result += sorted(name)[0]
    
    result

 

최종 작성 코드

>>> def solution(survey, choices):  
...     a = {"R":0,"T":0,"C":0,"F":0,"J":0,"M":0,"A":0,"N":0}
...     answer = ""
...     #점수 계산
...     for x,y in zip(survey,choices):
...         if y > 4: a[x[1]] += y-4
...         elif y < 4: a[x[0]] += 4-y
...     # 성격분류
...     answer+='R' if a['R']>=a['T'] else 'T'
...     answer+='C' if a['C']>=a['F'] else 'F'
...     answer+='J' if a['J']>=a['M'] else 'M'
...     answer+='A' if a['A']>=a['N'] else 'N'
...     return answer
...
>>> s= ["AN", "CF", "MJ", "RT", "NA"]
>>> c= [5, 3, 2, 7, 5]
>>> solution(s, c)
'TCMA'
728x90