스터디/코딩테스트

python 코딩 테스트 - 카카오 2022 인턴 기출 1번

공대생철이 2023. 11. 23. 17:04
728x90

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

 

프로그래머스

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

programmers.co.kr

 

문제가 매우 길어 링크를 첨부했다.

 

처음 든 생각

- 성격 유형 점수랑 성격 유형이 4가지로 고정이니깐 같은 인덱스로 조작해야겠다.

- 앞에 오는 게 뭔지 관리를 해줘야겠다.

- 각 지표별 성격유형을 점수를 매긴 후 정렬을 해주고 합쳐줘야겠다.

- 같은 점수를 나타내더라도 알파벳 순서로 정렬 되므로 굳이 추가적인 작업은 필요 없겠다.

 

나의 답

def solution(survey, choices):
    answer = ''
    a = ["RT","TR","CF","FC","JM","MJ","AN","NA"]
    arr = [{"R":0, "T":0},{"C":0,"F":0},{"J":0,"M":0},{"A":0,"N":0}]
    
    for i in range(len(survey)):
        arrIdx =  a.index(survey[i]) // 2
        if choices[i] < 4:
            arr[arrIdx][survey[i][0]] += abs(choices[i]-4)
        elif choices[i] > 4:
            arr[arrIdx][survey[i][1]] += abs(choices[i]-4)
    tmp = []
    for j in arr:
        tmp.append(sorted(j.items(),key = lambda x:x[1], reverse=True))
    
    for k in tmp:
        answer+=k[0][0]
    
    return answer

가능한 문제 유형들과 각 지표별 성격 유형을 미리 선언해주었다. 

 

survey를 반복문을 돌면서 해당하는 지표에 접근해서 점수를 수정하면 된다.

 

그렇게 모든 점수를 입력하면 점수 기준 내림차순으로 정렬을 해주고 앞에 있는 애들을 하나씩 답에 갖다붙이면 끝이다. 

 

다른 풀이

def solution(survey, choices):
    result = {"R": 0, "T": 0, "C": 0, "F": 0, "J": 0, "M": 0, "A": 0, "N": 0}
    n = len(choices)
    for s, c in zip(survey, choices):
        c = c - 4
        if c < 0:
            result[s[0]] -= c
        elif c > 0:
            result[s[1]] += c
    answer = ""

    p_types = [("R", "T"), ("C", "F"), ("J", "M"), ("A", "N")]
    for type1, type2 in p_types:
        if result[type1] >= result[type2]:
            answer += type1
        else:
            answer += type2
    return answer

survey, choices 길이가 고정이므로 zip을 통해 튜플로 묶어준 후 반복문을 돌면서 해당하는 점수를 매겨주는 방식이다.

그 다음 지표별 성격 유형을 알파벳 순으로 미리 선언해준 후 그에 맞춰 정답에 추가하면 된다.

 

구현하는 방식은 달랐으나 큰 맥락을 비슷햇다. 

- 점수 - 4가 양수인지 아닌지 

- 알파벳 순으로 미리 해놓으면 점수가 같아도 상관 없다는 점

 

1번 문제에 레벨 1 문제라 실제 시험에서도 편안하게 머리 푸는 느낌으로 맞추고 넘어가야할 듯하다.

728x90