728x90
https://school.programmers.co.kr/learn/courses/30/lessons/118666
문제가 매우 길어 링크를 첨부했다.
처음 든 생각
- 성격 유형 점수랑 성격 유형이 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
'스터디 > 코딩테스트' 카테고리의 다른 글
python 코딩테스트 - 프로그래머스 최솟값 만들기 (2) | 2023.12.04 |
---|---|
python 코딩테스트 - 2022 카카오 인턴 기출 2번 (1) | 2023.11.24 |
python 코딩테스트 - 프로그래머스 구명보트 (1) | 2023.11.17 |
python 코딩테스트 - 프로그래머스 전력망을 둘로 나누기 (0) | 2023.11.16 |
python 코딩테스트 - 프로그래머스 할인 행사 (1) | 2023.11.14 |